{"id":413621,"date":"2024-06-29T23:14:21","date_gmt":"2024-06-29T23:14:21","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=413621"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=413621","title":{"rendered":"<span>\u041e\u0442 OSB \u0434\u043e Serverless<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><strong>\u26a0\ufe0f Disclaimer<\/strong>: \u043e\u0431\u044b\u0447\u043d\u043e \u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e \u0441\u0432\u043e\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0444\u0440\u0430\u0437\u043e\u0439 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0451 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0434\u0438\u0447\u0430\u0439\u0448\u0438\u043c \u043e\u0432\u0435\u0440-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u043e\u043c. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 \u044f \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043e\u0431 \u044d\u0442\u043e\u0439 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0440\u0430\u043d\u0435\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u0442\u043e \u044d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u044b\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0436\u0430\u0439 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432: \u041e\u0421\u041f, \u0443\u0442\u0435\u043f\u043b\u0438\u0442\u0435\u043b\u044f, ESP8266, \u043a\u0435\u0440\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u043f\u0442\u0438\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 Yandex.Cloud. \u0423\u0441\u043f\u0435\u0448\u043d\u043e \u043b\u0438 \u2014 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0441\u043d\u0430.<\/p>\n<hr\/>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0421\u0442\u0430\u043d\u0438\u0441\u043b\u0430\u0432, \u0438 \u044f Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0414\u0432\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u044f \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u0432 \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0434\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0433\u043e\u0434 \u0437\u0435\u043c\u043b\u044f \u0432\u043e\u0437\u043b\u0435 \u043d\u0435\u0433\u043e \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u043b\u0430, \u0442\u043e \u044d\u0442\u0438\u043c \u043b\u0435\u0442\u043e\u043c \u043c\u044b \u0441 \u0436\u0435\u043d\u043e\u0439 \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0430\u0448\u0443 \u0441\u0435\u043c\u0435\u0439\u043d\u0443\u044e \u0436\u0438\u0437\u043d\u044c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u0430\u0434\u043e\u043a, \u0438 \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u0440\u0442\u043e\u0444\u0435\u043b\u044f. \u041a\u0430\u0440\u0442\u043e\u0448\u043a\u0430 \u0432\u044b\u0440\u043e\u0441\u043b\u0430 \u0431\u0435\u0437\u043e \u0432\u0441\u044f\u043a\u043e\u0439 \u0438\u043d\u0442\u0440\u0438\u0433\u0438, \u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u0430\u044f, \u043d\u0435 \u043f\u043b\u043e\u0445\u0430\u044f, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u0430\u044f. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u0430 \u0438 \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 (\u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u0442\u0430\u043a-\u0442\u043e: \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 13-15 \u0432\u0435\u0434\u0435\u0440 \u043e\u0442\u0431\u043e\u0440\u043d\u043e\u0439) \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0431 \u0435\u0451 \u0437\u0438\u043c\u043d\u0435\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0418\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0431\u044b\u043b\u0438 \u043d\u0435 \u0431\u0435\u0437 \u043c\u0438\u043d\u0443\u0441\u043e\u0432: \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u043e\u0433\u0440\u0435\u0431 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 45 \u043a\u043c \u043f\u0440\u043e\u0435\u0437\u0434\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0441\u044c \u0446\u0435\u043d\u0442\u0440 \u0433\u043e\u0440\u043e\u0434\u0430, \u0432 \u0434\u043e\u043c\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u0435\u043f\u043b\u043e \u2014 \u043f\u0440\u043e\u0440\u0430\u0441\u0442\u0451\u0442, \u0430 \u0432 \u043d\u0435\u0443\u0442\u0435\u043f\u043b\u0451\u043d\u043d\u043e\u043c \u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0445\u043e\u043b\u043e\u0434\u043d\u043e (\u0437\u0438\u043c\u043e\u0439 \u0434\u043e -35 \u00b0C). \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0432 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0433\u0434\u0435-\u0442\u043e \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0433\u0440\u0435\u0431, \u043d\u043e \u043a \u044d\u0442\u043e\u0439 \u0437\u0438\u043c\u0435 \u043e\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u043e.<\/p>\n<p>\u041c\u044b\u0441\u043b\u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0440\u0430 \u0447\u0442\u043e-\u0442\u043e \u0440\u0435\u0448\u0430\u0442\u044c, \u0441\u0438\u0434\u0435\u043b\u0438 \u0432 \u043c\u043e\u0435\u0439 \u0433\u043e\u043b\u043e\u0432\u0435 \u0443\u0436\u0435 \u0432\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e, \u0438 \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0437\u0438\u043c\u044b. \u041a\u0430\u043a \u0432\u0434\u0440\u0443\u0433, \u043e\u0433\u043b\u044f\u0434\u0435\u0432\u0448\u0438\u0441\u044c \u0432 \u0441\u0430\u0440\u0430\u0435 \u043d\u0430 \u0442\u0435 \u0441\u0442\u0440\u043e\u0439\u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c, \u043c\u0435\u043d\u044f \u043f\u043e\u0441\u0435\u0442\u0438\u043b \u043f\u043b\u0430\u043d\u2026<\/p>\n<h2>\u201c\u0423 \u043c\u0435\u043d\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0432\u0441\u0451 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c\u201d<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39e\/f0a\/00d\/39ef0a00d8834ab6bcaebbd504abee6a.png\" alt=\"\u0418\u0437 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0447\u0430\u0442\u0438\u043a\u0430.\" title=\"\u0418\u0437 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0447\u0430\u0442\u0438\u043a\u0430.\" width=\"593\" height=\"473\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/39e\/f0a\/00d\/39ef0a00d8834ab6bcaebbd504abee6a.png\"\/><figcaption>\u0418\u0437 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0447\u0430\u0442\u0438\u043a\u0430.<\/figcaption><\/figure>\n<p>\u041a\u043e\u043b\u043b\u0435\u0433\u0438 \u043d\u0430\u0434\u043e \u043c\u043d\u043e\u0439 \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u0448\u0443\u0442\u044f\u0442 \u043c\u0435\u043c\u0430\u043c\u0438. \u041d\u0435 \u0440\u0430\u0437 \u0438 \u043d\u0435 \u0434\u0432\u0430 \u043f\u0440\u043e\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u043b\u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u0430 \u043c\u044b\u0441\u043b\u044c, \u043f\u0440\u0438 \u0432\u0437\u0433\u043b\u044f\u0434\u0435 \u043d\u0430 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0438 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437. \u0427\u0442\u043e \u0436\u0435 \u0431\u044b\u043b\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439?<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u043b\u0442\u043e\u0440\u0430 <a href=\"https:\/\/leroymerlin.ru\/product\/plita-osp-3-murom-12-mm-2500x1250-mm-3125-m-89137643\/\" rel=\"noopener noreferrer nofollow\">\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043b\u0438\u0441\u0442\u0430 \u041e\u0421\u041f<\/a> (<em>OSB, oriented strand board<\/em>) \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 2,5\u043c\u00d71,25\u043c\u00d712\u043c\u043c \u0438 \u0435\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0435\u0437\u043a\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0435\u043c\u044c \u043f\u043b\u0438\u0442 \u0442\u0435\u0445\u043d\u043e\u043d\u0438\u043a\u043e\u043b\u0435\u0432\u0441\u043a\u043e\u0433\u043e XPS \u0443\u0442\u0435\u043f\u043b\u0438\u0442\u0435\u043b\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u043e\u0439 50\u043c\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0430 Wemos D1 Mini Pro (<a href=\"https:\/\/aliexpress.ru\/item\/1005003042175839.html\" rel=\"noopener noreferrer nofollow\"><u>\u043f\u043e\u0445\u043e\u0436<\/u><\/a>).<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0438 <a href=\"https:\/\/aliexpress.ru\/item\/4000068914916.html\" rel=\"noopener noreferrer nofollow\"><u>DS18B20 \u0432 \u0433\u0435\u0440\u043c\u0435\u0442\u0438\u0447\u043d\u044b\u0445 \u043a\u0430\u043f\u0441\u0443\u043b\u0430\u0445<\/u><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0430 \u0442\u0432\u0435\u0440\u0434\u043e\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u043b\u0435 \u043d\u0430 220 \u0412 \u0440\u0430\u0437\u043d\u043e\u0439 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 (<a href=\"https:\/\/aliexpress.ru\/item\/32981687291.html\" rel=\"noopener noreferrer nofollow\"><u>\u0440\u0430\u0437<\/u><\/a> \u0438 <a href=\"https:\/\/aliexpress.ru\/item\/32889489536.html\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u0432\u0430<\/u><\/a>).<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0442\u0440\u043e\u043d\u044b \u0438 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438 \u043d\u0430\u043a\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u044f, \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u043e \u0432\u0440\u0435\u043c\u0451\u043d \u0434\u043e \u043e\u0442\u0434\u0435\u043b\u043a\u0438 \u0434\u043e\u043c\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0434\u0435\u044f \u0431\u044b\u043b\u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u044e \u0438\u0437 XPS \u043f\u043b\u0438\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 1\u00d71\u00d70.5 \u0448\u0442. \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044f\u0449\u0438\u043a. \u041f\u043e\u0434\u0433\u043e\u043d\u044f\u044e \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u043a\u0430\u0440\u043a\u0430\u0441 \u0438\u0437 \u041e\u0421\u041f, \u0441\u0442\u044f\u0433\u0438\u0432\u0430\u044e \u0443\u0433\u043e\u043b\u043a\u0430\u043c\u0438. \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u0448\u0438\u0432\u0430\u044e \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u0439 \u043f\u043b\u0451\u043d\u043a\u043e\u0439. \u0412\u043d\u0443\u0442\u0440\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e ESP8266, \u043e\u043d \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 1-wire \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432, \u0447\u0435\u0440\u0435\u0437 \u0428\u0418\u041c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u043e\u0439 \u043d\u0430\u043a\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0433\u0440\u0435\u0435\u0442 \u0432\u043e\u0437\u0434\u0443\u0445. \u041f\u043b\u044e\u0441 <a href=\"https:\/\/www.dns-shop.ru\/product\/5a69f427fd723332\/\" rel=\"noopener noreferrer nofollow\"><u>\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 USB-\u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440<\/u><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u043d\u044f\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u043e\u0437\u0434\u0443\u0445.<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u043e\u0442\u043e \u0441 \u044d\u0442\u0430\u043f\u0430 \u0441\u0431\u043e\u0440\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/70a\/893\/ebb\/70a893ebb1f8808ad4adda62ad723971.png\" alt=\"\u0412\u043e\u0442 \u043e\u043d\u0430 \u0441\u0442\u043e\u0438\u0442 \u0438 \u043c\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0430.\" title=\"\u0412\u043e\u0442 \u043e\u043d\u0430 \u0441\u0442\u043e\u0438\u0442 \u0438 \u043c\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0430.\" width=\"600\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/70a\/893\/ebb\/70a893ebb1f8808ad4adda62ad723971.png\"\/><figcaption>\u0412\u043e\u0442 \u043e\u043d\u0430 \u0441\u0442\u043e\u0438\u0442 \u0438 \u043c\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0430.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ce\/dd1\/112\/6cedd11123247bbcbb56c18db77281c0.png\" alt=\"\u041e\u0431\u0440\u0435\u0437\u0430\u043b \u0443 XPS \u043f\u0430\u0437\u044b, \u0441\u0442\u044f\u043d\u0443\u043b \u0441\u043a\u043e\u0442\u0447\u0435\u043c.\" title=\"\u041e\u0431\u0440\u0435\u0437\u0430\u043b \u0443 XPS \u043f\u0430\u0437\u044b, \u0441\u0442\u044f\u043d\u0443\u043b \u0441\u043a\u043e\u0442\u0447\u0435\u043c.\" width=\"1280\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ce\/dd1\/112\/6cedd11123247bbcbb56c18db77281c0.png\"\/><figcaption>\u041e\u0431\u0440\u0435\u0437\u0430\u043b \u0443 XPS \u043f\u0430\u0437\u044b, \u0441\u0442\u044f\u043d\u0443\u043b \u0441\u043a\u043e\u0442\u0447\u0435\u043c.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/789\/72b\/512\/78972b5120cf1e6c96ad0045e6897a51.png\" alt=\"\u041d\u0430\u0447\u0438\u043d\u0430\u044e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0440\u043a\u0430\u0441 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443.\" title=\"\u041d\u0430\u0447\u0438\u043d\u0430\u044e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0440\u043a\u0430\u0441 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443.\" width=\"1280\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/789\/72b\/512\/78972b5120cf1e6c96ad0045e6897a51.png\"\/><figcaption>\u041d\u0430\u0447\u0438\u043d\u0430\u044e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0440\u043a\u0430\u0441 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/10b\/1b3\/fd4\/10b1b3fd4730d7d138d0a5fda6fe5906.png\" alt=\"\u0412 \u043d\u0435\u0433\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043a\u043e\u0440\u043e\u0431 \u0438\u0437 XPS.\" title=\"\u0412 \u043d\u0435\u0433\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043a\u043e\u0440\u043e\u0431 \u0438\u0437 XPS.\" width=\"600\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/10b\/1b3\/fd4\/10b1b3fd4730d7d138d0a5fda6fe5906.png\"\/><figcaption>\u0412 \u043d\u0435\u0433\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043a\u043e\u0440\u043e\u0431 \u0438\u0437 XPS.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e37\/3e8\/a97\/e373e8a97d27589e8a09b8545e31056b.png\" alt=\"\u041f\u0440\u043e\u043a\u043b\u0435\u0438\u0432\u0430\u044e \u0432\u0441\u0435 \u0441\u0442\u044b\u043a\u0438 \u0430\u043b\u044e\u043c\u0438\u043d\u0438\u0435\u0432\u043e\u0439 \u043b\u0435\u043d\u0442\u043e\u0439. \u0415\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0440\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0430\u043d\u0442\u0438\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u043a\u043b\u0435\u0435\u043d\u044b \u0430\u043b\u044e\u043c\u0438\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043a\u043e\u0442\u0447\u0435\u043c.\" title=\"\u041f\u0440\u043e\u043a\u043b\u0435\u0438\u0432\u0430\u044e \u0432\u0441\u0435 \u0441\u0442\u044b\u043a\u0438 \u0430\u043b\u044e\u043c\u0438\u043d\u0438\u0435\u0432\u043e\u0439 \u043b\u0435\u043d\u0442\u043e\u0439. \u0415\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0440\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0430\u043d\u0442\u0438\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u043a\u043b\u0435\u0435\u043d\u044b \u0430\u043b\u044e\u043c\u0438\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043a\u043e\u0442\u0447\u0435\u043c.\" width=\"600\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e37\/3e8\/a97\/e373e8a97d27589e8a09b8545e31056b.png\"\/><figcaption>\u041f\u0440\u043e\u043a\u043b\u0435\u0438\u0432\u0430\u044e \u0432\u0441\u0435 \u0441\u0442\u044b\u043a\u0438 \u0430\u043b\u044e\u043c\u0438\u043d\u0438\u0435\u0432\u043e\u0439 \u043b\u0435\u043d\u0442\u043e\u0439. \u0415\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0440\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0430\u043d\u0442\u0438\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u043a\u043b\u0435\u0435\u043d\u044b \u0430\u043b\u044e\u043c\u0438\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043a\u043e\u0442\u0447\u0435\u043c.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/744\/07c\/5eb\/74407c5ebf8d1f2e669fb63cec8b5207.png\" alt=\"\u041a\u0443\u043f\u0438\u043b \u0432 \u041b\u0435\u0440\u0443\u0430 \u041c\u0435\u0440\u043b\u0435\u043d\u0435 \u0437\u0430 ~ 300 \u0440\u0443\u0431\u043b\u0435\u0439 5 \u043a\u0432.\u043c. \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u0439 \u043f\u043b\u0451\u043d\u043a\u0438 \u0442\u043e\u043b\u0449\u0438\u043d\u043e\u0439 3 \u043c\u043c. \u041a\u0441\u0442\u0430\u0442\u0438, \u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0441\u0447\u0451\u0442 \u2014 \u043f\u043b\u0451\u043d\u043a\u0443 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0446\u0435\u043f\u0438\u0442\u044c \u0441\u0442\u0435\u043f\u043b\u0435\u0440\u043e\u043c \u043a XPS, \u0441\u043a\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0442. \u041f\u043e\u043a\u0430 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438 \u0442\u0430\u043a, \u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u043a\u043b\u0435\u0438\u0442\u044c.\" title=\"\u041a\u0443\u043f\u0438\u043b \u0432 \u041b\u0435\u0440\u0443\u0430 \u041c\u0435\u0440\u043b\u0435\u043d\u0435 \u0437\u0430 ~ 300 \u0440\u0443\u0431\u043b\u0435\u0439 5 \u043a\u0432.\u043c. \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u0439 \u043f\u043b\u0451\u043d\u043a\u0438 \u0442\u043e\u043b\u0449\u0438\u043d\u043e\u0439 3 \u043c\u043c. \u041a\u0441\u0442\u0430\u0442\u0438, \u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0441\u0447\u0451\u0442 \u2014 \u043f\u043b\u0451\u043d\u043a\u0443 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0446\u0435\u043f\u0438\u0442\u044c \u0441\u0442\u0435\u043f\u043b\u0435\u0440\u043e\u043c \u043a XPS, \u0441\u043a\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0442. \u041f\u043e\u043a\u0430 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438 \u0442\u0430\u043a, \u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u043a\u043b\u0435\u0438\u0442\u044c.\" width=\"600\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/744\/07c\/5eb\/74407c5ebf8d1f2e669fb63cec8b5207.png\"\/><figcaption>\u041a\u0443\u043f\u0438\u043b \u0432 \u041b\u0435\u0440\u0443\u0430 \u041c\u0435\u0440\u043b\u0435\u043d\u0435 \u0437\u0430 ~ 300 \u0440\u0443\u0431\u043b\u0435\u0439 5 \u043a\u0432.\u043c. \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u0439 \u043f\u043b\u0451\u043d\u043a\u0438 \u0442\u043e\u043b\u0449\u0438\u043d\u043e\u0439 3 \u043c\u043c. \u041a\u0441\u0442\u0430\u0442\u0438, \u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0441\u0447\u0451\u0442 \u2014 \u043f\u043b\u0451\u043d\u043a\u0443 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0446\u0435\u043f\u0438\u0442\u044c \u0441\u0442\u0435\u043f\u043b\u0435\u0440\u043e\u043c \u043a XPS, \u0441\u043a\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0442. \u041f\u043e\u043a\u0430 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438 \u0442\u0430\u043a, \u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u043a\u043b\u0435\u0438\u0442\u044c.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/269\/4b1\/366\/2694b13661050d9f6e35f60f33155a08.png\" width=\"600\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/269\/4b1\/366\/2694b13661050d9f6e35f60f33155a08.png\"\/><figcaption><\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u044f\u0449\u0438\u043a\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0430, \u043f\u0440\u0438\u043c\u0435\u0440\u044f\u0435\u043c\u0441\u044f:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/611\/0ed\/e1d\/6110ede1d9c84ead787be86365d08032.png\" alt=\"\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u043e \u0440\u0435\u0431\u0440\u0443 \u041e\u0421\u041f \u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044f\u0449\u0438\u043a\u0430, \u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u0440\u044b\u0448\u043a\u0438 \u043d\u0430\u043a\u043b\u0435\u0435\u043d\u0430 \u043f\u043e\u043b\u043e\u0441\u043a\u0430 \u0431\u0435\u043b\u043e\u0433\u043e \u043c\u044f\u0433\u043a\u043e\u0433\u043e \u0443\u0442\u0435\u043f\u043b\u0438\u0442\u0435\u043b\u044f. \u0421 \u043d\u0435\u0439 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0435\u0440\u043c\u0435\u0442\u0438\u0447\u043d\u043e.\" title=\"\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u043e \u0440\u0435\u0431\u0440\u0443 \u041e\u0421\u041f \u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044f\u0449\u0438\u043a\u0430, \u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u0440\u044b\u0448\u043a\u0438 \u043d\u0430\u043a\u043b\u0435\u0435\u043d\u0430 \u043f\u043e\u043b\u043e\u0441\u043a\u0430 \u0431\u0435\u043b\u043e\u0433\u043e \u043c\u044f\u0433\u043a\u043e\u0433\u043e \u0443\u0442\u0435\u043f\u043b\u0438\u0442\u0435\u043b\u044f. \u0421 \u043d\u0435\u0439 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0435\u0440\u043c\u0435\u0442\u0438\u0447\u043d\u043e.\" width=\"1280\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/611\/0ed\/e1d\/6110ede1d9c84ead787be86365d08032.png\"\/><figcaption>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u043e \u0440\u0435\u0431\u0440\u0443 \u041e\u0421\u041f \u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044f\u0449\u0438\u043a\u0430, \u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u0440\u044b\u0448\u043a\u0438 \u043d\u0430\u043a\u043b\u0435\u0435\u043d\u0430 \u043f\u043e\u043b\u043e\u0441\u043a\u0430 \u0431\u0435\u043b\u043e\u0433\u043e \u043c\u044f\u0433\u043a\u043e\u0433\u043e \u0443\u0442\u0435\u043f\u043b\u0438\u0442\u0435\u043b\u044f. \u0421 \u043d\u0435\u0439 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0435\u0440\u043c\u0435\u0442\u0438\u0447\u043d\u043e.<\/figcaption><\/figure>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u043e\u0448\u043a\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0451 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u0410 \u0432\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0451 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0448\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043e\u0431\u043e\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044f, \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043f\u0440\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0440\u043a\u043e\u0432\u043a\u0438 \u0438 \u0441\u0432\u0451\u043a\u043b\u044b!<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0432 \u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445 \u0435\u0449\u0451 \u043b\u0435\u0436\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0435\u0437\u043a\u043e\u0432 \u041e\u0421\u041f \u0438 \u043f\u0430\u0440\u0430 \u043b\u0438\u0441\u0442\u043e\u0432 XPS. \u0414\u0435\u043b\u0430\u044e \u043e\u0431\u044a\u0451\u043c\u043d\u0443\u044e \u043a\u0440\u044b\u0448\u043a\u0443, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u0430\u043b\u043b\u0435\u0442\u0443 \u0432\u043d\u0438\u0437\u0443 \u0434\u043b\u044f \u0446\u0438\u0440\u043a\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0435\u043a\u0430\u044e\u0449\u0435\u0439 \u0432\u043b\u0430\u0433\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0415\u0449\u0451 \u043f\u0430\u0440\u0430 \u0444\u043e\u0442\u043e \u0441\u0431\u043e\u0440\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d3d\/b7f\/0ed\/d3db7f0ed86b5184cadfe92ea4930d8f.png\" alt=\"\u041f\u0430\u043b\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u043e\u044f\u0442\u044c \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043d\u043e\u0436\u043a\u0430\u0445. \u0412 \u0446\u0435\u043b\u043e\u043c \u043e\u043d\u0430 \u0445\u043b\u0438\u043f\u043a\u0430\u044f \u0438 \u043f\u0440\u043e\u0433\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439, \u043d\u043e \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u0434\u0430\u0436\u0435 \u043c\u0435\u043d\u044f.\" title=\"\u041f\u0430\u043b\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u043e\u044f\u0442\u044c \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043d\u043e\u0436\u043a\u0430\u0445. \u0412 \u0446\u0435\u043b\u043e\u043c \u043e\u043d\u0430 \u0445\u043b\u0438\u043f\u043a\u0430\u044f \u0438 \u043f\u0440\u043e\u0433\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439, \u043d\u043e \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u0434\u0430\u0436\u0435 \u043c\u0435\u043d\u044f.\" width=\"1280\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d3d\/b7f\/0ed\/d3db7f0ed86b5184cadfe92ea4930d8f.png\"\/><figcaption>\u041f\u0430\u043b\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u043e\u044f\u0442\u044c \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043d\u043e\u0436\u043a\u0430\u0445. \u0412 \u0446\u0435\u043b\u043e\u043c \u043e\u043d\u0430 \u0445\u043b\u0438\u043f\u043a\u0430\u044f \u0438 \u043f\u0440\u043e\u0433\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439, \u043d\u043e \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u0434\u0430\u0436\u0435 \u043c\u0435\u043d\u044f.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/182\/13a\/107\/18213a1070b58616ab837d655c338396.png\" alt=\"\u041f\u043e\u0440\u043e\u0436\u043d\u044f\u043a\u043e\u043c. XPS \u0441\u0442\u0435\u043d \u0438 \u043a\u0440\u044b\u0448\u043a\u0438 \u043d\u0435 \u043d\u0430 100% \u043f\u043b\u043e\u0442\u043d\u043e \u043f\u0440\u0438\u043b\u0435\u0433\u0430\u0435\u0442 \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0437\u043e\u0440, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.\" title=\"\u041f\u043e\u0440\u043e\u0436\u043d\u044f\u043a\u043e\u043c. XPS \u0441\u0442\u0435\u043d \u0438 \u043a\u0440\u044b\u0448\u043a\u0438 \u043d\u0435 \u043d\u0430 100% \u043f\u043b\u043e\u0442\u043d\u043e \u043f\u0440\u0438\u043b\u0435\u0433\u0430\u0435\u0442 \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0437\u043e\u0440, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/182\/13a\/107\/18213a1070b58616ab837d655c338396.png\"\/><figcaption>\u041f\u043e\u0440\u043e\u0436\u043d\u044f\u043a\u043e\u043c. XPS \u0441\u0442\u0435\u043d \u0438 \u043a\u0440\u044b\u0448\u043a\u0438 \u043d\u0435 \u043d\u0430 100% \u043f\u043b\u043e\u0442\u043d\u043e \u043f\u0440\u0438\u043b\u0435\u0433\u0430\u0435\u0442 \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0437\u043e\u0440, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.<\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/457\/b9d\/345\/457b9d3456ca53e7228634b4a93b8765.png\" alt=\"\u0421\u043e\u0431\u0440\u0430\u043d\u043e, \u0441\u043a\u0440\u0443\u0447\u0435\u043d\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u043e, \u043f\u043e\u0434\u0440\u0435\u0437\u0430\u043d\u043e. \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e.\" title=\"\u0421\u043e\u0431\u0440\u0430\u043d\u043e, \u0441\u043a\u0440\u0443\u0447\u0435\u043d\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u043e, \u043f\u043e\u0434\u0440\u0435\u0437\u0430\u043d\u043e. \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e.\" width=\"602\" height=\"339\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/457\/b9d\/345\/457b9d3456ca53e7228634b4a93b8765.png\"\/><figcaption>\u0421\u043e\u0431\u0440\u0430\u043d\u043e, \u0441\u043a\u0440\u0443\u0447\u0435\u043d\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u043e, \u043f\u043e\u0434\u0440\u0435\u0437\u0430\u043d\u043e. \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e.<\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<\/p>\n<h2>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043a\u043e\u0434\u0438\u0442\u044c<\/h2>\n<p>\u041f\u043e\u0441\u0442\u0440\u043e\u0438\u0432 \u044f\u0449\u0438\u043a, \u043d\u0430\u0447\u0438\u043d\u0430\u044e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0441\u043e\u0444\u0442\u0443.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0442\u0440\u0438 \u0442\u0435\u0440\u043c\u043e\u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u0434\u0432\u0430 \u0441 \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u043c\u0438 \u043f\u043e\u043a\u043e\u0440\u043e\u0447\u0435, \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u043b\u0438\u043d\u043d\u0435\u0435. \u0414\u0432\u0430 \u043f\u043e\u043a\u043e\u0440\u043e\u0447\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0449\u0438\u043a\u0430, \u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u0443\u043b\u0438\u0446\u0443. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0441\u0431\u043e\u0440\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432:<\/p>\n<details class=\"spoiler\">\n<summary>temperature.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef TEMPERATURE_H #define TEMPERATURE_H  #include &lt;OneWire.h> #include &lt;DallasTemperature.h>  \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0438\u043c \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f. #define ONE_WIRE_PULLUP  3  \/\/ \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b. #define TEMPERATURE_SENSORS_COUNT  4  \/\/ \u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u043d\u0441\u043e\u0440 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. #define ERRONEOUS_VALUE -150.0f  class TEMPERATURE_RESULT { private:   uint8_t devices;   uint64_t addresses[TEMPERATURE_SENSORS_COUNT];   float values[TEMPERATURE_SENSORS_COUNT];  public:   inline TEMPERATURE_RESULT(uint8_t devices, uint64_t addresses[], float values[]) {     this->devices = std::min((int) devices, TEMPERATURE_SENSORS_COUNT);     for(uint8_t idx = 0; idx &lt; this->devices; idx += 1) {       this->addresses[idx] = addresses[idx];       this->values[idx] = values[idx];     }   }    inline uint8_t getDeviceCount() {     return devices;   }    inline uint64_t getAddress(uint8_t idx) {     return 0 &lt;= idx &amp;&amp; idx &lt; devices       ? addresses[idx]       : -1;   }    inline float getValue(uint8_t idx) {     return 0 &lt;= idx &amp;&amp; idx &lt; devices       ? values[idx]       :ERRONEOUS_VALUE;   }    inline float getValueByAddress(uint64_t address) {     for(uint8_t idx = 0; idx &lt; devices; idx += 1) {       if (addresses[idx] == address) {         return values[idx];       }     }      return ERRONEOUS_VALUE;   } };  class OneWireDS18B20Measurer { private:   DallasTemperature *sensors; public:   inline OneWireDS18B20Measurer(DallasTemperature *dallasTemperature) {     this->sensors = dallasTemperature;   }   void setup();   TEMPERATURE_RESULT measure(); };  #endif \/\/ TEMPERATURE_H<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>temperature.cpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"common.h\" #include \"temperature.h\"  void OneWireDS18B20Measurer::setup() {   this->sensors->begin(); }  TEMPERATURE_RESULT OneWireDS18B20Measurer::measure() {   DallasTemperature &amp; DT = * this->sensors;      DT.requestTemperatures();    uint8_t devices = DT.getDeviceCount();   uint64_t addresses[TEMPERATURE_SENSORS_COUNT];   float values[TEMPERATURE_SENSORS_COUNT];    for(uint8_t idx = 0; idx &lt; devices; idx += 1) {     if (TEMPERATURE_SENSORS_COUNT &lt;= idx) {       break;     }      DT.getAddress((uint8_t *) &amp; addresses[idx], idx);     values[idx] = DT.getTempCByIndex(idx);      Serial.printf(\"Sensor %llX temperature is %.1f C.\\n\", addresses[idx], values[idx]);   }    return TEMPERATURE_RESULT(devices, addresses, values); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043d\u044f\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u044b\u0440\u044b\u043c\u0438. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0445 \u043f\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0438\u0432\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u0441\u043b\u043e\u0432\u043d\u0443\u044e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0449\u0438\u043a\u0430. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u0430 \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u0437 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f (\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c, \u0447\u0442\u043e DS18B20 \u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0442\u044b \u0432 \u0441\u0432\u043e\u0451\u043c \u0430\u0434\u0440\u0435\u0441\u0435).<\/p>\n<details class=\"spoiler\">\n<summary>model.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef MODEL_H #define MODEL_H  #include \"temperature.h\"  extern float calcApproximateInternalTemperature(TEMPERATURE_RESULT raw);  #endif \/\/ MODEL_H<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>model.cpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"model.h\"  const uint64_t OUTSIDE_SENSOR_ADDRESS = 0xA40119282FCCCC28; \/\/ \u0421\u0430\u043c\u044b\u0439 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u043e\u0434. const uint64_t HEATERS_SENSOR_ADDRESS = 0xA50300A279D11E28; \/\/ \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439, \u0431\u0435\u0437 \u0443\u0437\u0435\u043b\u043a\u0430. const uint64_t BOTTOM_SENSOR_ADDRESS  = 0x250300A2799A4F28; \/\/ \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439, \u0437\u0430\u0432\u044f\u0437\u0430\u043d \u0443\u0437\u0435\u043b\u043a\u043e\u043c.  float calcApproximateInternalTemperature(TEMPERATURE_RESULT raw) {   float outsideTemperature = raw.getValueByAddress(OUTSIDE_SENSOR_ADDRESS);   float heatersTemperature = raw.getValueByAddress(HEATERS_SENSOR_ADDRESS);   float bottomTemperature = raw.getValueByAddress(BOTTOM_SENSOR_ADDRESS);    \/\/ \u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043e\u0431\u0430 \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0432\u044b\u0448\u043b\u0438 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f?   if (heatersTemperature &lt;= ERRONEOUS_VALUE &amp;&amp; bottomTemperature &lt;= ERRONEOUS_VALUE) {     \/\/ TODO: \u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \"\u0443 \u043d\u0430\u0441 \u043c\u0435\u0433\u0430-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\".     \/\/ \u041f\u043e\u043a\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b \u043e\u0431\u043e\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0436\u0435\u0447\u044c \u0432\u0441\u0451 \u043d\u0430\u0445\u0440\u0435\u043d.     return 123.0f;   }      \/\/ \u0412 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u043d\u0441\u043e\u0440 \u043f\u043e\u0434 \u043f\u043e\u0434\u0434\u043e\u043d\u043e\u043c.   if (heatersTemperature &lt;= ERRONEOUS_VALUE) {     return bottomTemperature;   }    \/\/ \u0412 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u043d\u0441\u043e\u0440 \u043e\u043a\u043e\u043b\u043e \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   if (bottomTemperature &lt;= ERRONEOUS_VALUE) {     return heatersTemperature;   }    \/\/ \u041e\u0431\u0430 \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c \u0431\u043b\u0438\u0436\u0435 \u043a \u043f\u043e\u0434\u0434\u043e\u043d\u0443.   return (2.0f * bottomTemperature + heatersTemperature) \/ 3.0f; }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0442\u043e\u043c \u0434\u0430\u043b\u0451\u043a\u043e\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043f\u043e\u0433\u0440\u0435\u0431\u0435 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0431\u044b\u043b \u043e\u043f\u044b\u0442 \u0432 \u0441\u0430\u043c\u044b\u0435 \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0440\u043e\u0437\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0443 \u043d\u0430\u043a\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430. \u041a\u0430\u0440\u0442\u043e\u0448\u043a\u0430 \u043e\u0442 \u043d\u0435\u0451, \u043a\u0441\u0442\u0430\u0442\u0438, \u043d\u0435 \u043f\u0440\u043e\u0440\u0430\u0441\u0442\u0430\u0435\u0442. \u041d\u043e \u0442\u0430\u043c \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u044f\u0449\u0438\u043a, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u0435\u0437 \u043e\u043f\u0430\u0441\u043a\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0446\u0435\u043b\u044b\u0439 \u043c\u0435\u0441\u044f\u0446. \u0412 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0432\u0441\u0451 \u0438\u043d\u0430\u0447\u0435 \u2014 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0451 \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0434\u043b\u0438\u0442\u044c \u0441\u0440\u043e\u043a \u0441\u043b\u0443\u0436\u0431\u044b, \u0430 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0431\u043e\u0440.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0433\u043e \u0428\u0418\u041c, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0440\u0430\u0441\u0441\u044b\u043f\u0430\u043b\u0430\u0441\u044c \u0432 \u043f\u0440\u0430\u0445 \u0438\u0437-\u0437\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 zero-crossing \u043d\u0430 \u043e\u0431\u043e\u0438\u0445 \u043c\u043e\u0438\u0445 \u0440\u0435\u043b\u0435 \u2014 \u043f\u0440\u0438 \u043f\u043e\u0434\u0430\u0447\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0444\u0440\u043e\u043d\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043b\u0438\u043d\u0438\u044f\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u043e\u043b\u044c. \u042d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u043e \u043c\u0435\u043d\u044f \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0428\u0418\u041c\u0430 \u0434\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u043a\u043e\u043b\u043e 10 \u0413\u0446. \u041d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0441\u0435\u0442\u0438 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044f\u0440\u043a\u043e\u0441\u0442\u044c\u044e, \u043f\u043e \u0441\u0443\u0442\u0438, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u0442. \u0417\u0430\u0442\u043e \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 10 \u0413\u0446 \u044d\u0442\u043e \u043d\u0435 \u0443\u0436\u0435 \u043d\u0435 \u0428\u0418\u041c, \u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u0431\u043e\u0441\u043a\u043e\u043f \u2014 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0433\u043e\u0440\u0435\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u0442\u0443\u0445\u043d\u0443\u0442\u044c. \u042d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0435 \u043c\u043d\u043e\u0439 &#171;\u043f\u0440\u043e\u0434\u043b\u0435\u043d\u0438\u0435 \u0436\u0438\u0437\u043d\u0438 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438&#187;, \u043d\u0443 \u043a\u0440\u043e\u043c\u0435 \u0441\u0430\u043c\u043e\u0433\u043e ZC \u2014 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043d\u0443\u043b\u044f \u044d\u0442\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0431\u043e\u043b\u0435\u0435 \u0449\u0430\u0434\u044f\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u044b\u0439 \u0440\u0438\u0441\u043a \u043f\u0435\u0440\u0435\u0433\u043e\u0440\u0430\u043d\u0438\u044f \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438, \u044f \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u043b\u0435. \u043d\u0435 \u0438\u043c\u0435\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u043c\u043e\u0440\u0433\u0430\u044e\u0449\u0435\u0439 \u043b\u0430\u043c\u043f\u044b, \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0439, \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439, \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0433\u0438\u0441\u0442\u0435\u0440\u0435\u0437\u0438\u0441\u0443. \u0415\u0433\u043e \u043d\u0438\u0436\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0438\u0436\u0435 \u043d\u0438\u0436\u043d\u0435\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0428\u0418\u041c\u0430, \u0447\u0442\u043e\u0431\u044b \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u0430\u043d\u0430\u043b.<\/p>\n<p>\u041a\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u043c\u0438 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0442\u0430\u043a\u043e\u0439:<\/p>\n<details class=\"spoiler\">\n<summary>hysteresis.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef HYSTERESIS_H #define HYSTERESIS_H  enum LastState {   FULLY_OFF = 0,  \/\/ \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d.   SOFT_ON   = 1,  \/\/ \u0412\u043a\u043b\u044e\u0447\u0451\u043d \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0428\u0418\u041c.   FULLY_ON  = 2,  \/\/ \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043a\u043b\u044e\u0447\u0451\u043d. };  extern void setupHysteresisPWM();  class HysteresisSwitcher {   private:     uint8_t pin;     float min;     float max;          LastState lastState;      bool supportsPWM;     int pwmChannel;      void updateSoft(float value);     void updateHard(float value);      void stopPwm();      void turnHardOn();     void turnHardOff();      public:     inline HysteresisSwitcher(uint8_t targetPin, float minTemperature, float maxTemperature, bool supportsPWM) {       this->pin = targetPin;       pinMode(targetPin, OUTPUT);        this->min = minTemperature;       this->max = maxTemperature;        this->supportsPWM = supportsPWM;     }      void updateCurrentTemperature(float temperature);      inline LastState getState() {       return lastState;     } };  #endif \/\/ HYSTERESIS_H<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>hysteresis.cpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include &lt;cmath> #include &lt;ESP.h>  #define USING_MICROS_RESOLUTION  true #include &lt;ESP8266_PWM.h>  #include \"hysteresis.h\"  #define HW_TIMER_INTERVAL_US  20L #define PWM_FREQUENCE         10.0f  #define LOW   0 #define HIGH  1  ESP8266Timer pwmTimer; ESP8266_PWM pwmController;  void IRAM_ATTR pwmTimerHandler() {   pwmController.run(); }  void setupHysteresisPWM() {   pwmTimer.attachInterruptInterval(HW_TIMER_INTERVAL_US, pwmTimerHandler); }  void HysteresisSwitcher::updateCurrentTemperature(float value) {   if (this->supportsPWM) {     this->updateSoft(value);   } else {     this->updateHard(value);   } }  void HysteresisSwitcher::updateSoft(float value) {   float workingDiapason = max - min;   Serial.printf(\"PIN %d, workingDiapason = %f\\n\", this->pin, workingDiapason);    float valueInDiapason = value - min;   Serial.printf(\"PIN %d, valueInDiapason = %f\\n\", this->pin, valueInDiapason);    float proportional = valueInDiapason \/ workingDiapason;   float duty = 1.0f - proportional;    Serial.printf(\"PIN %d, Value = %f, prop = %f, duty = %f\\n\", this->pin, value, proportional, duty);    if (duty &lt;= 0.0f) {     if (pwmChannel >= 0) {       pwmController.deleteChannel((unsigned) pwmChannel);       pwmChannel = -1;     }     turnHardOff();     return;   }      if (duty >= 1.f) {     if (pwmChannel >= 0) {       pwmController.deleteChannel((unsigned) pwmChannel);       pwmChannel = -1;     }     turnHardOn();     return;   }       float percentage = 100.0f * duty;   if (pwmChannel >= 0) {     pwmController.modifyPWMChannel(pwmChannel, pin, PWM_FREQUENCE, percentage);   } else {     pwmChannel = pwmController.setPWM(pin, PWM_FREQUENCE, percentage);   }   lastState = SOFT_ON; }  void HysteresisSwitcher::updateHard(float value) {   bool turnOn = value &lt;= min;   bool turnOff = max &lt;= value;      \/\/ \u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c.   if (FULLY_OFF == lastState &amp;&amp; turnOn) {     turnHardOn();     return;   }    if (FULLY_ON == lastState &amp;&amp; turnOff) {     turnHardOff();     return;   } }  void HysteresisSwitcher::turnHardOn() {   pinMode(pin, OUTPUT);   digitalWrite(pin, HIGH);   this->lastState = FULLY_ON;   Serial.println(\"Heater on pin \" + String(pin) + \" is turned on.\"); }  void HysteresisSwitcher::turnHardOff() {   pinMode(pin, OUTPUT);   digitalWrite(pin, LOW);   this->lastState = FULLY_OFF;   Serial.println(\"Heater on pin \" + String(pin) + \" is turned off.\"); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u0440\u0435\u043b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439. \u041f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043d\u0430 DIN-\u0440\u0435\u0439\u043a\u0443. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e &#171;\u0443\u043c\u043d\u044b\u043c&#187;.<\/p>\n<p>\u042f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u043b\u0435\u0437, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0432\u0430\u0436\u043d\u043e \u0432\u0441\u0451 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u044b. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0435 \u0442\u0430\u043a, \u0442\u043e \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u043f\u043e\u0442\u0435\u0440\u0435\u0439 \u0443\u0440\u043e\u0436\u0430\u044f, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043a\u0430\u043a\u0438\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u0436\u0430\u0440\u043e\u043c. \u042f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u0445\u043e\u0447\u0443 \u0441\u0438\u0434\u0435\u0442\u044c \u0438 \u0434\u0443\u043c\u0430\u0442\u044c, \u0432\u0441\u0451 \u043b\u0438 \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u042f \u0445\u043e\u0447\u0443 \u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435, \u0438\u0434\u0435\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u0441\u0451 \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u043c\u043a\u0438 (\u0438\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c).<\/p>\n<p>\u0426\u0435\u043b\u0435\u0432\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u0430, \u043a\u0443\u0434\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0432\u0430: \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043c\u043e\u0435\u0433\u043e \u041f\u041a \u0432 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435. \u041e\u0431\u043b\u0430\u043a\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043e \u0432\u0441\u0451\u043c \u043c\u043e\u0451\u043c \u043a\u043e\u0442\u0442\u0435\u0434\u0436\u043d\u043e\u043c \u043f\u043e\u0441\u0451\u043b\u043a\u0435, \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0435\u0434\u043a\u0438, \u043d\u043e \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f. \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u0430\u043f\u0430 \u043f\u0443\u0441\u043a\u043e\u043d\u0430\u043b\u0430\u0434\u043a\u0438 \u0438 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u043b\u0430\u0447\u0435\u043d\u043e \u0432\u043e\u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>\u041a\u043e\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0442\u0430\u043a\u043e\u0439:<\/p>\n<details class=\"spoiler\">\n<summary>http.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef HTTP_H #define HTTP_H  #define WIFI_SSID  \"\u0422\u0443\u0442 \u043c\u043e\u044f Wi-Fi \u0441\u0435\u0442\u044c\" #define WIFI_PASS  \"\u0410 \u0442\u0443\u0442 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 \u043d\u0435\u0451 ;)\"  #include \"temperature.h\" #include \"hysteresis.h\"  extern void setupWiFi(); extern void notifyServers(TEMPERATURE_RESULT &amp; measurementResult, float modellingResult, LastState state0, LastState state1);  #endif \/\/ HTTP_H<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>http.cpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"HardwareSerial.h\" #include \"http.h\"  #include &lt;Arduino.h> #include &lt;ESP8266WiFi.h> #include &lt;ESP8266WiFiMulti.h> #include &lt;ESP8266HTTPClient.h> #include &lt;WiFiClientSecureBearSSL.h>  #include &lt;ArduinoJson.h>  ESP8266WiFiMulti WiFiMulti;  \/\/ \u041e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430. const uint8_t fingerprint[] = { 0x00, };  struct SERVER_ENDPOINT {   bool secure;   String address; } ENDPOINTS[] = {   {     false,     String(\"http:\/\/&lt;IP-\u0430\u0434\u0440\u0435\u0441 \u0432 \u043c\u043e\u0435\u0439 LAN>:9700\/api\/potato\"),   }, {     true,     String(\"https:\/\/&lt;\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441>\/api\/potato\"),   }, };  void setupWiFi() {   for (uint8_t t = 4; t > 0; t -= 1) {     Serial.printf(\"[SETUP] WAIT %d...\\n\", t);     Serial.flush();     delay(1000);   }    WiFi.mode(WIFI_STA);   WiFiMulti.addAP(WIFI_SSID, WIFI_PASS);    Serial.println(\"MAC adddress: \" + WiFi.macAddress()); }  String serializeRequest(TEMPERATURE_RESULT &amp; measurementResult, float modellingResult, LastState state0, LastState state1); void sendToSecureServer(String requestPayload, String address); void sendToInsecureServer(String requestPayload, String address); void onExchangeComplete(int httpStatus, String responsePayload);  void notifyServers(TEMPERATURE_RESULT &amp; measurementResult, float modellingResult, LastState state0, LastState state1) {   wl_status_t status = WiFiMulti.run();    if (WiFiMulti.run() != WL_CONNECTED) {     Serial.println(\"Not connected to WiFi station.\");     return;   }    String requestBody = serializeRequest(measurementResult, modellingResult, state0, state1);    for (uint8_t serverId = 0; serverId &lt; sizeof (ENDPOINTS) \/ sizeof (SERVER_ENDPOINT); serverId += 1) {     SERVER_ENDPOINT &amp; endpoint = ENDPOINTS[serverId];          Serial.println(\"POST \" + endpoint.address);      if (endpoint.secure) {       sendToSecureServer(requestBody, endpoint.address);     } else {       sendToInsecureServer(requestBody, endpoint.address);     }   } }  String serializeRequest(TEMPERATURE_RESULT &amp; measurementResult, float modellingResult, LastState state0, LastState state1) {   StaticJsonDocument&lt;1024> json;    json[\"deviceId\"] = WiFi.macAddress();      JsonObject raw = json.createNestedObject(\"raw\");   for(uint8_t sensorId = 0; sensorId &lt; measurementResult.getDeviceCount(); sensorId += 1) {     char key[20];     sprintf(key, \"%llX\", measurementResult.getAddress(sensorId));     raw[key] = measurementResult.getValue(sensorId);   }    json[\"indoorTemperature\"] = modellingResult;    JsonArray heaters = json.createNestedArray(\"heaters\");   heaters[0] = state0;   heaters[1] = state1;    String result;   serializeJson(json, result);   Serial.println(\"JSON: \" + result);   return result; }  void sendToSecureServer(String requestPayload, String address) {   std::unique_ptr&lt;BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure);    client->setInsecure();   \/\/ client->setFingerprint(fingerprint);    HTTPClient http;    if (http.begin(*client, address)) {     http.addHeader(\"Content-Type\", \"application\/json\");          int httpStatus = http.POST(requestPayload);     if (httpStatus > 0) {       onExchangeComplete(httpStatus, http.getString());     } else {       Serial.printf(\"[HTTPS] Failed, error: %s\\n\", http.errorToString(httpStatus).c_str());     }      http.end();   } else {     Serial.printf(\"[HTTPS] Unable to connect.\\n\");   } }  void sendToInsecureServer(String requestPayload, String address) {   WiFiClient client;   HTTPClient http;   if (http.begin(client, address)) {     http.addHeader(\"Content-Type\", \"application\/json\");          int httpStatus = http.POST(requestPayload);      if (httpStatus > 0) {       onExchangeComplete(httpStatus, http.getString());     } else {       Serial.printf(\"[HTTP] Failed, error: %s\\n\", http.errorToString(httpStatus).c_str());     }      http.end();   } else {     Serial.printf(\"[HTTP] Unable to connect.\\n\");   } }  void onExchangeComplete(int httpStatus, String responsePayload) {   if (httpStatus != HTTP_CODE_OK) {     return;   }    Serial.println(responsePayload); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u0438\u0440\u043f\u0438\u0447\u0438\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>esp8266_potato_firmware.ino<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"common.h\" #include \"temperature.h\" #include \"model.h\" #include \"hysteresis.h\" #include \"http.h\"  \/\/ \u041a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0446\u0438\u043a\u043b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435-\u0440\u0435\u0448\u0435\u043d\u0438\u0435-\u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435. #define CONTROL_LOOP_DELAY_MS           30000  #define STRONG_HEATER_TEMPERATURE_HIGH  5.5f #define WEAK_HEATER_TEMPERATURE_HIGH    5.5f #define WEAK_HEATER_TEMPERATURE_LOW     3.0f #define STRONG_HEATER_TEMPERATURE_LOW   1.5f  OneWire oneWireMaster(ONE_WIRE_PIN); DallasTemperature temperatureSensors(&amp;oneWireMaster, ONE_WIRE_PULLUP); OneWireDS18B20Measurer temperatureMeasurer(&amp;temperatureSensors);  HysteresisSwitcher weakHeaterSwitcher(WEAK_HEATER_PIN,                                       WEAK_HEATER_TEMPERATURE_LOW,                                       WEAK_HEATER_TEMPERATURE_HIGH,                                       true); HysteresisSwitcher strongHeaterSwitcher(STRONG_HEATER_PIN,                                         STRONG_HEATER_TEMPERATURE_LOW,                                         STRONG_HEATER_TEMPERATURE_HIGH,                                         false);  void setup() {   Serial.begin(115200);   Serial.println();    temperatureMeasurer.setup();    setupHysteresisPWM();    setupWiFi(); }  float debugTemp = -50.0f; float enterDebugTemp() {   if (Serial.available() > 0) {     char buffer[100] = { 0 };     Serial.readBytesUntil('\\n', buffer, sizeof(buffer));     sscanf(buffer, \"%f\", &amp;debugTemp);     Serial.println(\"Debug temp has been changed to \" + String(debugTemp));   }    return debugTemp; }  void loop() {   TEMPERATURE_RESULT measurementResult = temperatureMeasurer.measure();    float modellingResult = calcApproximateInternalTemperature(measurementResult);   Serial.println(\"Modelled internal temperature is \" + String(modellingResult) + \" C.\");      float overridden = enterDebugTemp();   if (overridden > -50.0f) {     modellingResult = overridden;   }    weakHeaterSwitcher.updateCurrentTemperature(modellingResult);   strongHeaterSwitcher.updateCurrentTemperature(modellingResult);    notifyServers(     measurementResult,     modellingResult,     weakHeaterSwitcher.getState(),     strongHeaterSwitcher.getState());      delay(CONTROL_LOOP_DELAY_MS); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0442\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c, \u0434\u0430 \u0435\u0449\u0451 \u0438 \u043d\u0435 \u0440\u0430\u0437. \u041d\u043e \u043f\u043e\u043a\u0430 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 \u043c\u0435\u043d\u044f \u043f\u043e\u0434\u0436\u0438\u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/h2>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u0436\u0435\u043b\u0435\u0437\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0444\u043e\u0440\u043c\u0443 \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u0441\u0442\u043e\u043b\u0435. \u042f \u043a\u0443\u043f\u0438\u043b \u0441\u0430\u043c\u044b\u0439 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 4-\u044e\u043d\u0438\u0442\u043e\u0432\u044b\u0439 \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u044b\u0439 \u0449\u0438\u0442\u043e\u043a, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u043e\u0431\u0430 \u0440\u0435\u043b\u0435, \u043a\u043e\u043f\u0435\u0435\u0447\u043d\u0443\u044e din-\u0440\u043e\u0437\u0435\u0442\u043a\u0443, \u0432\u044b\u0432\u0435\u043b \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u0430\u0431\u0435\u043b\u0438. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u043a Wemos \u0432\u0441\u0435 \u0442\u0440\u0438 \u0442\u0435\u0440\u043c\u043e\u0434\u0430\u0442\u0447\u0438\u043a\u0430.<\/p>\n<p>\u041a \u0437\u0430\u0434\u043d\u0435\u0439 \u0441\u0442\u0435\u043d\u043a\u0435 \u043a\u0440\u044b\u0448\u043a\u0438 \u044f\u0449\u0438\u043a\u0430 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u043b \u043a\u0443\u0441\u043e\u043a \u0413\u0412\u041b.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043a\u043e\u0434 \u0431\u044b\u043b \u043e\u0442\u043b\u0430\u0436\u0435\u043d, \u0430 \u043b\u0430\u043c\u043f\u0430 \u043d\u0430\u043a\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u043e\u0440\u0433\u0430\u043b\u0430 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u0441\u0443\u0442\u043a\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445 \u0438 \u043d\u0435 \u0441\u0433\u043e\u0440\u0435\u043b\u0430, \u044f \u0443\u0431\u0435\u0434\u0438\u043b\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/100\/787\/f05\/100787f05c5eeb5ae8c46a7d1f89483e.jpg\" alt=\"??\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0440\u0430\u0437\u0432\u0438\u0434\u044c\u0442\u0435  \u044d\u0442\u043e \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c.\" title=\"??\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0440\u0430\u0437\u0432\u0438\u0434\u044c\u0442\u0435  \u044d\u0442\u043e \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c.\" width=\"1280\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/100\/787\/f05\/100787f05c5eeb5ae8c46a7d1f89483e.jpg\" data-blurred=\"true\"\/><figcaption>??\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0440\u0430\u0437\u0432\u0438\u0434\u044c\u0442\u0435  \u044d\u0442\u043e \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/05b\/c4b\/b14\/05bc4bb14d37c230b51edfed4ed685ea.jpg\" alt=\"\u041e\u0434\u0438\u043d \u0438\u0437 DS18B20 \u0432\u044b\u0432\u0435\u043b \u043d\u0430 \u0443\u043b\u0438\u0446\u0443.\" title=\"\u041e\u0434\u0438\u043d \u0438\u0437 DS18B20 \u0432\u044b\u0432\u0435\u043b \u043d\u0430 \u0443\u043b\u0438\u0446\u0443.\" width=\"1280\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/05b\/c4b\/b14\/05bc4bb14d37c230b51edfed4ed685ea.jpg\" data-blurred=\"true\"\/><figcaption>\u041e\u0434\u0438\u043d \u0438\u0437 DS18B20 \u0432\u044b\u0432\u0435\u043b \u043d\u0430 \u0443\u043b\u0438\u0446\u0443.<\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u0440\u043e\u0434\u043b\u0438\u0432\u043e. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f Wemos \u0438 \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u0437\u0430\u043f\u0438\u0442\u0430\u0442\u044c \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u043b \u0432 \u0440\u043e\u0437\u0435\u0442\u043a\u0443 \u0442\u0440\u043e\u0439\u043d\u0438\u043a \u0438 \u0434\u0432\u0435 \u0437\u0430\u0440\u044f\u0434\u043a\u0438 ?\u200d\u2642\ufe0f. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e \u043f\u0438\u0442\u0430\u043d\u0438\u044e. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u043a\u0443\u043f\u0438\u0442\u044c \u0449\u0438\u0442\u043e\u043a \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u043f\u0430\u0440\u0443 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043d\u0430 DIN. \u0422\u0430\u043a\u0436\u0435 \u0431\u043e\u043b\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u043e\u0442\u043a\u0438 \u043a\u0430\u0431\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u043e \u043b\u0435\u043d\u0438\u0432\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c, \u043f\u043b\u044e\u0441 \u0433\u0440\u0435\u043b\u0430 \u043c\u044b\u0441\u043b\u044c &#171;<em>\u0430 \u0432\u0434\u0440\u0443\u0433 \u044f \u0431\u0443\u0434\u0443 \u0447\u0442\u043e-\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0435\u0440\u0435\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c \u043f\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044e<\/em>&#171;. \u0412\u0441\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u044d\u0441\u0442\u0435\u0442\u0438\u043a\u0430 \u0442\u043e\u0436\u0435 \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0439 \u0437\u0438\u043c\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c, \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0433\u043e\u0434\u0443 \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0430\u043f\u0433\u0440\u0435\u0439\u0434.<\/p>\n<p>\u0415\u0449\u0451 \u043c\u043d\u0435 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e, \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043b\u0435 \u0438 \u0442\u043e\u0436\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c \u0441 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u041d\u043e \u0443 \u043c\u0435\u043d\u044f \u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c \u0440\u0435\u043b\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0438 \u044d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442 \u0434\u043b\u044f v2.<\/p>\n<p>\u042f \u0437\u0430\u043a\u0430\u0437\u0430\u043b <a href=\"https:\/\/aliexpress.ru\/item\/32815756888.html\" rel=\"noopener noreferrer nofollow\">\u0432\u043d\u0435\u0448\u043d\u0438\u0435 Wi-Fi \u0430\u043d\u0442\u0435\u043d\u043d\u044b<\/a>, \u043d\u043e \u043f\u0440\u0438\u0451\u043c \u0438 \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439, \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a \u043c\u043e\u0435\u043c\u0443 <a href=\"https:\/\/keenetic.ru\/ru\/keenetic-hero-4g\" rel=\"noopener noreferrer nofollow\">Keenetic<\/a>-\u0443 \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u0435\u043d\u044c, \u0432\u0441\u0435 \u043e\u043d\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e, \u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445 \u043c\u0435\u0442\u0440\u0438\u043a \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442 \u0440\u0430\u0437\u0440\u044b\u0432\u043e\u0432. \u042f \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0445\u0443\u0436\u0435.<\/p>\n<h2>\u041b\u044e\u0431\u043b\u044e Aliexpress \u0437\u0430 \u044d\u0442\u043e<\/h2>\n<p>\u041a\u0430\u043a \u044f \u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435, \u043c\u043d\u0435 \u0441\u0430\u043c\u043e\u043c\u0443 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438\u0434\u0435\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438 \u043d\u0430\u043a\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445. \u041c\u043d\u043e\u0433\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0442\u043e\u043c\u0443 \u0442\u043e\u0432\u0430\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u043d\u044f \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442.<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0443\u043a\u0430-\u043b\u0438\u0446\u043e<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c3e\/0f1\/b17\/c3e0f1b17464dd4c7cfb59453402e3d8.png\" alt=\"\u0420\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430 \u0442\u0435\u0445 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445, \u0447\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0430.\" title=\"\u0420\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430 \u0442\u0435\u0445 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445, \u0447\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0430.\" width=\"960\" height=\"516\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c3e\/0f1\/b17\/c3e0f1b17464dd4c7cfb59453402e3d8.png\"\/><figcaption>\u0420\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430 \u0442\u0435\u0445 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445, \u0447\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0430.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/480\/34b\/788\/48034b788cb5d499dfcd67a109fe3f20.png\" alt=\"\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u0445 \u0442\u0430\u043a \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u2014 \u043a\u0435\u0440\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u043f\u0442\u0438\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u043c\u0443 \u0431\u0440\u0430\u0442\u0443 \u0437\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0430\u0441\u0430.\" title=\"\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u0445 \u0442\u0430\u043a \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u2014 \u043a\u0435\u0440\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u043f\u0442\u0438\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u043c\u0443 \u0431\u0440\u0430\u0442\u0443 \u0437\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0430\u0441\u0430.\" width=\"1199\" height=\"810\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/480\/34b\/788\/48034b788cb5d499dfcd67a109fe3f20.png\"\/><figcaption>\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u0445 \u0442\u0430\u043a \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u2014 \u043a\u0435\u0440\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u043f\u0442\u0438\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u043c\u0443 \u0431\u0440\u0430\u0442\u0443 \u0437\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0430\u0441\u0430.<\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p><a href=\"https:\/\/aliexpress.ru\/item\/1005002740405259.html\" rel=\"noopener noreferrer nofollow\"><u>\u0422\u0430\u043a\u0438\u0435 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u0438<\/u><\/a> \u043d\u0435 \u043f\u0435\u0440\u0435\u0433\u043e\u0440\u044f\u0442 \u0441 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u0430\u043a \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043c\u0443\u0447\u0430\u0442\u044c \u043c\u043e\u0438 \u0433\u043b\u0430\u0437\u0430 \u043c\u043e\u0440\u0433\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043d\u0438\u0438 \u0432 \u043c\u043e\u0440\u043e\u0437. \u0417\u0430\u043a\u0430\u0437\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0442\u0443\u043a \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0432, \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u043e\u0445\u043e\u043b\u043e\u0434\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0443 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/216\/c99\/e40\/216c99e40bcbc62c7a34cca8e4bd770b.jpeg\" alt=\"\u0412\u043e\u0442 \u043e\u043d\u0438 \u0434\u043e\u0435\u0445\u0430\u043b\u0438 \u0434\u043e \u043c\u0435\u043d\u044f. \u041e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 4 \u0448\u0442. \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0432: 25 \u0412\u0442, 50 \u0412\u0442, 75 \u0412\u0442 \u0438 100 \u0412\u0442.\" title=\"\u0412\u043e\u0442 \u043e\u043d\u0438 \u0434\u043e\u0435\u0445\u0430\u043b\u0438 \u0434\u043e \u043c\u0435\u043d\u044f. \u041e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 4 \u0448\u0442. \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0432: 25 \u0412\u0442, 50 \u0412\u0442, 75 \u0412\u0442 \u0438 100 \u0412\u0442.\" width=\"1280\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/216\/c99\/e40\/216c99e40bcbc62c7a34cca8e4bd770b.jpeg\" data-blurred=\"true\"\/><figcaption>\u0412\u043e\u0442 \u043e\u043d\u0438 \u0434\u043e\u0435\u0445\u0430\u043b\u0438 \u0434\u043e \u043c\u0435\u043d\u044f. \u041e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 4 \u0448\u0442. \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0432: 25 \u0412\u0442, 50 \u0412\u0442, 75 \u0412\u0442 \u0438 100 \u0412\u0442.<\/figcaption><\/figure>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0443\u0436\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u044e 75 \u0412\u0442 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0443 \u043d\u0430 \u0428\u0418\u041c-\u043a\u0430\u043d\u0430\u043b\u0435 \u043d\u0430 25 \u0412\u0442 \u0438 \u043d\u0430 75 \u0412\u0442 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u0438. \u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043d\u0438\u0437\u0438\u043b\u0430\u0441\u044c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0432\u043d\u0438\u0437\u0443, \u0433\u0434\u0435 \u043f\u043e\u0434\u0434\u043e\u043d, \u043d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u044f \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u044f\u0449\u0438\u043a\u0430 \u043d\u0430\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e \u0432 \u043d\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0446\u0438\u0440\u043a\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u043e\u0437\u0434\u0443\u0445\u0430.<\/p>\n<h2>\u041f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043a \u043e\u0431\u043b\u0430\u043a\u0430\u043c<\/h2>\n<p>\u041c\u043d\u0435 \u0434\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0431\u043b\u0438\u0436\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438, \u043a\u0430\u043a Cloud Functions, Serverless \u0438 \u0442.\u043f. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b S3 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u043a\u043e\u043c \u0441 Kubernetes, \u043f\u0438\u0441\u0430\u043b Helm-\u0447\u0430\u0440\u0442\u044b, \u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u044f \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432 Yandex Cloud \u0432\u044b\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0433\u0440\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u042f\u043d\u0434\u0435\u043a\u0441, \u043f\u043e\u0448\u0451\u043b \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443.<\/p>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<\/p>\n<ul>\n<li>\n<p>\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e-\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 serverless-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043c\u0435\u0442\u0440\u0438\u043a \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0430\u043b\u0435\u0440\u0442\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d serverless-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0439 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0430\u0442\u044c, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043b\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0432 \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435: \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u0438\u0437\u043a\u0430\u044f\/\u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 (\u043a\u0440\u043e\u043c\u0435 \u0443\u043b\u0438\u0447\u043d\u043e\u0439), \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0442.<\/p>\n<h3>\u041f\u0435\u0440\u0432\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441<\/h3>\n<p>\u0412\u0430\u0436\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u043c \u0434\u043b\u044f serverless-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430. \u0427\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0438 \u0447\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u043d \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u044f \u0437\u0430 \u044d\u0442\u043e \u043f\u043b\u0430\u0447\u0443. \u0423\u0447\u0451\u0442 \u0438\u0434\u0451\u0442 \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0432 \u0442\u0430\u043a\u0442\u0430\u0445 CPU \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u201c\u043d\u0430\u0441\u044b\u043f\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u044f\u0434\u0435\u0440\u201d \u043f\u0440\u043e\u0436\u043e\u0440\u043b\u0438\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0435 \u0441\u043f\u0430\u0441\u0451\u0442, \u0445\u043e\u0442\u044c \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0435\u043c\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u044f\u0449\u0438\u043a\u0435 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437 \u0432 30 \u0441\u0435\u043a\u0443\u043d\u0434, \u0438 \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0443\u0441\u043f\u0435\u0432\u0430\u043b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u043e \u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0432 idle, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 CPU \/ \u041e\u0417\u0423. \u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u042f\u043d\u0434\u0435\u043a\u0441.Cloud \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f94\/446\/d6c\/f94446d6c2b49414fb73ef904b0d162f.png\" alt=\"50 mCPU \u0438 128 \u041c\u0431 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u043c\u0438\u043d\u0438\u043c\u0443\u043c. \u042d\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u043b\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b (2 \u044f\u0434\u0440\u0430 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0434\u043e\u043b\u0435\u0439 20% \u0438 1 \u0413\u0431 \u041e\u0417\u0423).\" title=\"50 mCPU \u0438 128 \u041c\u0431 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u043c\u0438\u043d\u0438\u043c\u0443\u043c. \u042d\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u043b\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b (2 \u044f\u0434\u0440\u0430 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0434\u043e\u043b\u0435\u0439 20% \u0438 1 \u0413\u0431 \u041e\u0417\u0423).\" width=\"723\" height=\"576\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f94\/446\/d6c\/f94446d6c2b49414fb73ef904b0d162f.png\"\/><figcaption>50 mCPU \u0438 128 \u041c\u0431 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u043c\u0438\u043d\u0438\u043c\u0443\u043c. \u042d\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u043b\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b (2 \u044f\u0434\u0440\u0430 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0434\u043e\u043b\u0435\u0439 20% \u0438 1 \u0413\u0431 \u041e\u0417\u0423).<\/figcaption><\/figure>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u043d\u0430 node.js, \u043d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e Java-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0442\u0435\u043a\u0435. \u0412\u0434\u0440\u0443\u0433 \u043c\u043e\u0438 \u0445\u043e\u0442\u0435\u043b\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0442\u0438, \u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0438\u0447\u0438 \u043d\u0430 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0443\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0441 JVM \u0432 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0435\u0441\u0442\u044c, \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u0434\u0432\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445:<\/p>\n<ol>\n<li>\n<p>\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0442\u0438\u043f\u0430 Spring, \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u0433\u043e\u043b\u043e\u0439 Java, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0443\u0436\u0430\u0442\u044c JVM, \u0432\u044b\u0440\u0435\u0437\u0430\u0432 \u0438\u0437 \u043d\u0435\u0451 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e (GraalVM). \u0422\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 (Quarkus, Helidon, Micronaut \u0438 \u0434\u0430\u0436\u0435 Spring Native). \u0414\u043e\u043b\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430.<\/p>\n<\/li>\n<\/ol>\n<h3>Quarkus \u0438 ?\u200d\u2642\ufe0f<\/h3>\n<p>\u042f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u0447\u0430\u0442\u044c \u0441 <a href=\"https:\/\/quarkus.io\/about\/\" rel=\"noopener noreferrer nofollow\">Quarkus<\/a>. \u042f \u043d\u0430\u0447\u0430\u043b \u043d\u043e\u0432\u044b\u0439 \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0442\u0443\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 http-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 http-\u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043c\u0435\u0442\u043e\u0434-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u043e\u0439 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434 Quarkus \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Visual C++. \u042f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b. \u041f\u043e\u0442\u043e\u043c \u043e\u043d \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u043d\u0430\u0448\u0451\u043b cl.exe, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0418\u0445 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0431\u0430\u0442\u043d\u0438\u043a <em>x64 Native Tools Command Prompt<\/em>. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043c\u043d\u044e, \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 VS \u043e\u043d \u0431\u044b\u043b \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0437\u044f\u0442\u044c \u043f\u0430\u0440\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0421\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u044d\u0442\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u0431\u0430\u0439\u043d. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0434\u0438\u043d \u2013 \u0441\u043f\u0435\u0440\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0431\u0430\u0442\u043d\u0438\u043a, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0437 \u0435\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 Quarkus.<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u044d\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 <a href=\"https:\/\/quarkus.io\/guides\/building-native-image#producing-a-native-executable\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Quarkus-\u0430<\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3b6\/b74\/baf\/3b6b74baf668ada90614fb07080146d0.png\" alt=\"\u041f\u0430\u0440\u0430\u043c-\u043f\u0430\u0440\u0430\u043c-\u043f\u0430\u043c, \u043f\u0438\u0443.\" title=\"\u041f\u0430\u0440\u0430\u043c-\u043f\u0430\u0440\u0430\u043c-\u043f\u0430\u043c, \u043f\u0438\u0443.\" width=\"1397\" height=\"594\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b6\/b74\/baf\/3b6b74baf668ada90614fb07080146d0.png\"\/><figcaption>\u041f\u0430\u0440\u0430\u043c-\u043f\u0430\u0440\u0430\u043c-\u043f\u0430\u043c, \u043f\u0438\u0443.<\/figcaption><\/figure>\n<p>\u041f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0447\u0430\u0441, \u044f-\u0442\u0430\u043a\u0438 \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0438\u0437 IDEA, \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0432 \u0432 \u043d\u0435\u0439 \u043a\u0443\u0434\u0430-\u043b\u0438\u0431\u043e \u0447\u0442\u043e-\u043b\u0438\u0431\u043e, \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043c\u0438\u0440\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0432\u0435\u0449\u0435\u0439.<\/p>\n<p>\u041d\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u044f \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0441\u043c\u043e\u0433. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043f\u0430\u0434\u0430\u043b\u0430 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u043c \u0448\u0430\u0433\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0431\u0435\u0437 \u0432\u043d\u044f\u0442\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a. \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0432\u044b\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a \u201c\u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c\u201d. \u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0435\u0433\u043e \u0443\u0436\u0435 \u043d\u0435 \u0441\u043c\u043e\u0433\u0443 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u043e \u0431\u044b\u043b\u043e \u0432 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0439 VS (\u0443 \u043c\u0435\u043d\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u0430 2022, \u0430 Quarkus \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e 2017), \u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u044d\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0443\u0436\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e. \u042f \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0449\u0430\u0442\u044c\u0441\u044f \u0441 Quarkus-\u043e\u043c.<\/p>\n<h3>Spring \u0441\u043f\u0435\u0448\u0438\u0442 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c<\/h3>\n<p>\u042f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0447\u0438\u0442\u0430\u044e \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0432 \u0431\u043b\u043e\u0433\u0435 <a href=\"https:\/\/spring.io\/blog\/category\/releases\" rel=\"noopener noreferrer nofollow\">spring.io<\/a> \u0438 \u0432 \u043a\u0443\u0440\u0441\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043a\u0430\u043a <a href=\"https:\/\/docs.spring.io\/spring-native\/docs\/current\/reference\/htmlsingle\/\" rel=\"noopener noreferrer nofollow\">Spring Native<\/a>. \u0412\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 Spring \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 Framework 6 \/ Boot 3, \u043d\u043e \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u2014 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>\u042f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f Initializer \u0438 \u0441\u043e\u0437\u0434\u0430\u043b \u043d\u043e\u0432\u044b\u0439 Maven-\u043f\u0440\u043e\u0435\u043a\u0442. \u041e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u044e org.springframework.experimental:spring-native \u0438 \u043f\u0430\u0440\u043e\u0439 maven-\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 org.springframework.experimental:spring-aot-maven-plugin \u0438 org.graalvm.buildtools:native-maven-plugin. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438. \u041c\u044b \u0436\u0435 \u0446\u0435\u043b\u0438\u043c\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c docker-\u043e\u0431\u0440\u0430\u0437 \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u043c, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f Cloud Native Buildpacks. \u0412\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u2013 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0446\u0435\u043b\u044c spring-boot:build-image. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e <a href=\"https:\/\/www.docker.com\/products\/docker-desktop\/\" rel=\"noopener noreferrer nofollow\">docker<\/a>, \u0437\u0430\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u0435\u043d Visual C++.<\/p>\n<p>\u0421\u043d\u043e\u0432\u0430 \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0432 dummy-\u043a\u043e\u0434 \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c, \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u0438 http-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c, \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043d\u0430\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 1<\/strong>. Jackson \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c\/\u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c DTO. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"java\">\/**  * \u041f\u043e\u043b\u043d\u043e\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0444\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0438\u043a\u0430. \u0421\u044b\u0440\u044b\u0435 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.  *\/ @Value @Builder @Jacksonized public class PotatoHouseStateRequestDto {      \/**      * \u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.      *\/     String deviceId;      \/**      * \u0421\u044b\u0440\u044b\u0435 \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.      *\/     @NotNull     Map&lt;@NotNull String, @NotNull Float> raw;      \/**      * \u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043d\u0430 \u0443\u043b\u0438\u0446\u0435.      *\/     float outdoorTemperature;      \/**      * \u0423\u0441\u0440\u0435\u0434\u043d\u0451\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0432 \u044f\u0449\u0438\u043a\u0435.      *\/     float indoorTemperature;      \/**      * \u0421\u0442\u0430\u0442\u0443\u0441 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.      *\/     @NotNull     List&lt;@NotNull Integer> heaters; }<\/code><\/pre>\n<p>\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435. \u042d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u2014 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e \u043a\u0430\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438, \u0447\u0442\u043e\u0431\u044b Jackson \u0441\u043c\u043e\u0433 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0435\u0439 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0432 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"java\">@NativeHint(         types = @TypeHint(                 types = {                         PotatoHouseStateRequestDto.class,                         IamTokenProvider.IamResponse.class,                         MetricsRequestDto.class,                         MetricsRequestDto.MetricDto.class,                         MetricsRequestDto.TimeSeries.class,                 },                 access = {                         TypeAccess.PUBLIC_CONSTRUCTORS,                         TypeAccess.PUBLIC_METHODS,                 })) @SpringBootApplication(proxyBeanMethods = false) @EnableConfigurationProperties(PotatoHouseProperties.class) public class PotatoHouseApplication {     \/\/ ... }<\/code><\/pre>\n<p>\u041c\u0438\u043d\u0443\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0438\u0434\u0435\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 DTO, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0438 inner-\u043a\u043b\u0430\u0441\u0441\u044b. \u0412 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044d\u0442\u043e \u043f\u0440\u044f\u043c \u0430\u043d\u0442\u0438-\u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043d\u043e \u0432\u0435\u0434\u044c \u0443 \u043d\u0430\u0441 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u043d\u044b\u0439 serverless-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.<\/p>\n<p><strong>\u041d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0430\u043a\u0442 2<\/strong>. \u042f \u043d\u0435 \u0445\u043e\u0442\u0435\u043b, \u0447\u0442\u043e\u0431\u044b \u043b\u043e\u0433 \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u0432 \u0444\u0430\u0439\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u043a\u043e\u043d\u0444\u0438\u0433 logback \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0444\u0430\u0439\u043b, <a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/blob\/main\/spring-boot-project\/spring-boot\/src\/main\/resources\/org\/springframework\/boot\/logging\/logback\/base.xml\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u043a\u043e\u0439 \u0441\u043f\u0440\u044f\u0442\u0430\u043d \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0430\u0445 Spring<\/a>-\u0430, \u043d\u043e \u0431\u0435\u0437 FileAppender. \u042d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0441\u0451 \u0441\u043b\u043e\u043c\u0430\u043b\u043e \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043b\u043e\u0433\u043e\u0432 \u043d\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435, \u043d\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043f\u043e\u0445\u043e\u0436\u0435, \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c. \u041d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0436\u0438\u0442\u044c \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u044f \u043d\u0435 \u043f\u0440\u0438\u0434\u0430\u043b \u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u0442\u0430\u043b \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<p><strong>\u041d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0430\u043a\u0442 3<\/strong>. \u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u043b\u0435\u0442-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043d\u0430 Undertow \u0438\u043b\u0438 Jetty, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e Tomcat.<\/p>\n<h3>\u041b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b<\/h3>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u2014 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 <a href=\"https:\/\/cloud.yandex.ru\/docs\/monitoring\/operations\/metric\/add\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430<\/a>. \u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0443 \u043c\u0435\u043d\u044f \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e R&amp;D \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<p>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043f\u0440\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e. \u0423 \u042f\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0438 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 <a href=\"https:\/\/cloud.yandex.ru\/docs\/monitoring\/api-ref\/MetricsData\/write\" rel=\"noopener noreferrer nofollow\">write<\/a> \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/cloud.yandex.ru\/docs\/iam\/concepts\/authorization\/iam-token\" rel=\"noopener noreferrer nofollow\">IAM-\u0442\u043e\u043a\u0435\u043d<\/a>. \u0414\u0430\u043b\u044c\u0448\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0433\u043e (\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043d\u0430 \u0432\u0441\u044e \u0437\u0438\u043c\u0443 \u0438 \u0437\u0430\u0431\u044b\u043b) \u0438 <a href=\"https:\/\/cloud.yandex.ru\/docs\/iam\/concepts\/authorization\/iam-token\" rel=\"noopener noreferrer nofollow\">\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a> (\u0442\u043e\u043a\u0435\u043d \u0436\u0438\u0432\u0451\u0442 12 \u0447\u0430\u0441\u043e\u0432). \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 CLI <em>yc<\/em> \u0438\u043b\u0438 JWT \u043d\u0435 \u0440\u0435\u0436\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0435 12 \u0447\u0430\u0441\u043e\u0432, \u0437\u0432\u0443\u0447\u0430\u0442 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043a\u0430\u043a &#171;<em>\u0430 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u043e \u043c\u043d\u0435 \u043d\u0430\u0434\u043e?<\/em>&#171;.<\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u044f \u043d\u0430\u0448\u0451\u043b \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0433\u0434\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 service-account-\u043e\u043c <a href=\"https:\/\/cloud.yandex.ru\/docs\/serverless-containers\/operations\/sa\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043a\u0443\u0434\u0430-\u0442\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u044c<\/a> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0430\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 IAM-\u0442\u043e\u043a\u0435\u043d. \u041a\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e! \u0421\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u044d\u0442\u0443 \u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (<a href=\"https:\/\/cloud.yandex.ru\/docs\/functions\/operations\/function-sa\" rel=\"noopener noreferrer nofollow\">\u0434\u043b\u044f Cloud Functions<\/a>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440) \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0441\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f IAM-\u0442\u043e\u043a\u0435\u043d\u043e\u0432.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u0442\u044b\u043a \u0441\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u043c\u0435\u0442\u0440\u0438\u043a. \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 <a href=\"https:\/\/cloud.yandex.ru\/docs\/monitoring\/api-ref\/MetricsData\/write\" rel=\"noopener noreferrer nofollow\">write<\/a> \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e JSON. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u044f \u0432\u0432\u0435\u043b\u0438 \u043c\u0435\u043d\u044f \u0432 \u0441\u0442\u0443\u043f\u043e\u0440: \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f ts \u043e\u0442 metrics[].ts \u0438 \u043e\u0442 metrics[].timeseries[].ts? \u0412\u0441\u0435 \u043b\u0438 \u043e\u043d\u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b, \u0438\u043b\u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e \u0438\u0437 \u043d\u0438\u0445? \u0418\u043b\u0438 \u0432\u043e\u0442: \u0435\u0441\u043b\u0438 \u044f \u043f\u0435\u0440\u0435\u0434\u0430\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043b metrics[].name \/ labels \/ type \/ ts \/ value, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043c\u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c metrics[].timeseries \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0442\u044c \u043a\u0430\u043a-\u0442\u043e? \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 metrics[].timeseries[], \u0440\u0435\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 metrics[].value. \u041e\u0441\u043b\u043e\u0436\u043d\u044f\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 write \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u043d\u043e \u043c\u0435\u0442\u0440\u0438\u043a \u0432 \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u044f \u0441\u0432\u043e\u0438\u0445 \u043d\u0435 \u0432\u0438\u0434\u0435\u043b. \u042f \u0443\u0436\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0440\u044b\u0442\u044b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 API. \u041d\u043e \u043d\u0435\u0442, \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043b \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u043e\u043b\u044f (\u0432\u0441\u0435 \u0442\u0440\u0438 ts, \u0438 \u0432\u0441\u0435 \u043e\u0431\u0430 value) \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0443\u043c\u0430\u044e, \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u043d\u0430\u0434 \u0447\u0435\u043c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c (\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0438\u043b\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043c\u0435\u0442\u043e\u0434\u0430).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 <a href=\"https:\/\/gitlab.com\/SimSonic\/potato-house\/-\/tree\/main\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h3>CI \/ CD<\/h3>\n<p>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u044f \u0445\u0440\u0430\u043d\u044e \u0432\u0441\u0435 \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0432 GitLab. \u042f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0436\u0443 \u0437\u0430 \u0438\u0445 \u0431\u043b\u043e\u0433\u043e\u043c \u0441 2015 \u0433\u043e\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u0430\u043c \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u043b \u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b omnibus \u0438\u043d\u0441\u0442\u0430\u043d\u0441, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u044e\u0441\u044c \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043f\u043e <a href=\"https:\/\/about.gitlab.com\/releases\/categories\/releases\/\" rel=\"noopener noreferrer nofollow\"><u>\u0435\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u043e\u043c\u0443 \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u043c\u0443 \u0432\u044b\u043f\u0443\u0441\u043a\u0443<\/u><\/a>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445 \u0435\u0433\u043e CI\/CD.<\/p>\n<p>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 Container Registry \u042f\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0435 \u0441\u0442\u0430\u0434\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<details class=\"spoiler\">\n<summary>.gitlab-ci.yml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">stages:   - prepare image   - deploy to yandex  variables:   GIT_STRATEGY: clone   IMAGE_TAG: $CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG   CI_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG   YA_REGISTRY: cr.yandex   YA_REGISTRY_USER: oauth   YA_IMAGE: cr.yandex\/crp4rmi9sm7kt5e4hp67\/potato-house:$CI_COMMIT_REF_SLUG  .job-with-docker:   services:     - name: serversideup\/docker-utility       alias: docker   variables:     DOCKER_HOST: tcp:\/\/docker:2376     DOCKER_TLS_CERTDIR: \"\/certs\"     DOCKER_TLS_VERIFY: 1     DOCKER_CERT_PATH: \"\/certs\/client\"  build and test:   stage: prepare image   image: rcktsci\/java-tooling:17-code-coverage   extends:     - .job-with-docker   variables:     MAVEN_OPTS: \"-Dmaven.repo.local=${CI_PROJECT_DIR}\/.m2\/repository -Dmaven.compiler.forceJavacCompilerUse=true\"     MAVEN_CLI_OPTS: \"--batch-mode --settings ${CI_PROJECT_DIR}\/.gitlab-ci-maven-settings.xml\"     JACOCO_MAVEN: target\/site\/jacoco\/jacoco.xml   script:     - mvn $MAVEN_CLI_OPTS versions:set -DartifactId='*' -DoldVersion='*' -DnewVersion=\"$CI_COMMIT_REF_SLUG\"     - mvn $MAVEN_CLI_OPTS verify spring-boot:build-image     - docker login $CI_REGISTRY --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD     - docker tag $IMAGE_TAG $CI_IMAGE     - docker push $CI_IMAGE   interruptible: true   after_script:     - python3 \/opt\/cover2cover.py ${JACOCO_MAVEN} src\/main\/java > cobertura.xml     - python3 \/opt\/source2filename.py cobertura.xml   cache:     key: .m2     paths:       - .m2     when: always   artifacts:     paths:       - target\/*.jar     expire_in: 30 mins     reports:       junit: target\/*-reports\/TEST-*.xml       coverage_report:         coverage_format: cobertura         path: cobertura.xml  tag and push:   stage: deploy to yandex   image: rcktsci\/java-tooling:17   extends:     - .job-with-docker   script:     - docker login $CI_REGISTRY --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD     - docker login $YA_REGISTRY --username $YA_REGISTRY_USER --password $YA_REGISTRY_PASSWORD     - docker pull $CI_IMAGE     - docker tag  $CI_IMAGE $YA_IMAGE     - docker push $YA_IMAGE   interruptible: true   only:     refs:       - main<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ea8\/ab2\/c09\/ea8ab2c096cf307c9297b540b8e624b2.png\" alt=\"\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043f\u0430\u0440\u043e\u043b\u044c YA_REGISTRY_PASSWORD, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 VCS, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0435\u0433\u043e \u0432 Settings >> CI\/CD >> Variables.&#187; title=&#187;\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043f\u0430\u0440\u043e\u043b\u044c YA_REGISTRY_PASSWORD, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 VCS, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0435\u0433\u043e \u0432 Settings >> CI\/CD >> Variables.&#187; width=&#187;1125&#8243; height=&#187;416&#8243; data-src=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ea8\/ab2\/c09\/ea8ab2c096cf307c9297b540b8e624b2.png&#187;\/><figcaption>\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043f\u0430\u0440\u043e\u043b\u044c YA_REGISTRY_PASSWORD, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 VCS, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0435\u0433\u043e \u0432 Settings >> CI\/CD >> Variables.<\/figcaption><\/figure>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 serversideup\/docker-utility \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e <a href=\"https:\/\/gitlab.com\/gitlab-org\/gitlab-runner\/-\/issues\/29130#note_1075191809\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0442 \u044d\u0442\u0438\u043c Issue<\/a>, \u0430 \u0447\u0442\u043e \u0437\u0430 \u043e\u0431\u0440\u0430\u0437 \u0442\u0430\u043a\u043e\u0439 rcktsci\/java-tooling:17-code-coverage \u2014 <a href=\"https:\/\/habr.com\/ru\/post\/572936\/\" rel=\"noopener noreferrer nofollow\">\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439<\/a>.<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u044d\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u0432 Serverless >> \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0438, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u044f, \u043d\u0430\u0436\u0430\u0442\u044c <em>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0432\u0438\u0437\u0438\u044e<\/em>. \u0425\u043e\u0442\u044f \u043e\u0431\u0440\u0430\u0437 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0443\u043a\u0430\u0437\u0430\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u0442\u0435\u0433\u0443, \u0430 \u043d\u0435 \u043f\u043e \u0445\u044d\u0448\u0443. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0431\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0434\u043b\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 &#171;\u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043d\u0430 \u0432\u0441\u044e \u0437\u0438\u043c\u0443&#187; \u2014 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c dashboard<\/h2>\n<p>\u0421 \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u0430\u043a \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u041e\u0431\u0437\u043e\u0440 \u043c\u0435\u0442\u0440\u0438\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0435, \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0451 \u043b\u0435\u0433\u043a\u043e. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u044b\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434, \u043d\u0430 \u043d\u0451\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0432\u0435 \u043f\u0430\u043d\u0435\u043b\u0438 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u043e\u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0434\u043b\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6a3\/775\/fb1\/6a3775fb1ce6e2d6dcac72cd61adee08.png\" alt=\"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\" title=\"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\" width=\"840\" height=\"600\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6a3\/775\/fb1\/6a3775fb1ce6e2d6dcac72cd61adee08.png\"\/><figcaption>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/figcaption><\/figure>\n<p>\u042f \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=ru.yandex.cloud&amp;hl=ru&amp;gl=US\" rel=\"noopener noreferrer nofollow\">Yandex.Cloud<\/a> \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u043a\u0430\u043d\u0430\u043b \u0434\u043b\u044f \u0430\u043b\u0435\u0440\u0442\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0443\u0448\u0435\u0439. \u041f\u043e\u043a\u0430 \u043c\u043d\u0435 \u0435\u0433\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442. \u041f\u0443\u0448\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0438 \u043a\u043e\u0433\u0434\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0430\u043b\u0435\u0440\u0442\u044b (\u0435\u0441\u0442\u044c \u0443\u0440\u043e\u0432\u043d\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439), \u0438 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0430\u0432\u0434\u0430, \u0434\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0442\u0430\u043f\u043e\u0432, \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u043c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d. \u0418\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432 \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430. \u0418 \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0442\u043e\u0436\u0435 \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u043d\u0430\u0434 \u0447\u0435\u043c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \ud83d\ude42<\/p>\n<p>\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u0435\u043b\u044c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u043b\u0435\u0440\u0442, \u0447\u0442\u043e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043d\u0438\u0437\u043a\u0430. \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043b\u0430\u0442\u0430 Wemos, \u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0435\u0451 \u0438 \u0441\u044a\u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041d\u0430\u0448\u0451\u043b \u0431\u0430\u0433, \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b, \u0441\u0431\u0435\u0433\u0430\u043b \u0437\u0430 \u043f\u043b\u0430\u0442\u043e\u0439 \u0432 \u044f\u0449\u0438\u043a\u0435, \u0437\u0430\u043b\u0438\u043b \u043d\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443, \u043e\u0442\u043d\u0451\u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u041d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0451 \u0440\u0430\u0441\u043f\u0430\u044f\u043d\u043e, \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e, \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cac\/073\/fdc\/cac073fdcc1b60e5981077fa91a020a8.png\" alt=\"\u0411\u0430\u0433 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u2014 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044f.\" title=\"\u0411\u0430\u0433 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u2014 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044f.\" width=\"838\" height=\"586\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cac\/073\/fdc\/cac073fdcc1b60e5981077fa91a020a8.png\"\/><figcaption>\u0411\u0430\u0433 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u2014 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044f.<\/figcaption><\/figure>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043e\u0434\u043d\u0430 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0433\u0440\u0435\u0442\u044c \u044f\u0449\u0438\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/320\/531\/51e\/32053151e738e97aa047fb9f8c760a34.png\" alt=\"\u0412 \u0440\u0430\u0439\u043e\u043d\u0435 16:00 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u0435\u043f\u043b\u0435\u043b\u043e \u0438 \u0441\u0442\u0430\u043b\u043e \u0432\u0438\u0434\u043d\u043e \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 &quot;\u0428\u0418\u041c&quot; \u0438 &quot;\u0432\u044b\u043a\u043b&quot;. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0440\u0435\u0434\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437-\u0437\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0440\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435.\" title=\"\u0412 \u0440\u0430\u0439\u043e\u043d\u0435 16:00 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u0435\u043f\u043b\u0435\u043b\u043e \u0438 \u0441\u0442\u0430\u043b\u043e \u0432\u0438\u0434\u043d\u043e \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 &quot;\u0428\u0418\u041c&quot; \u0438 &quot;\u0432\u044b\u043a\u043b&quot;. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0440\u0435\u0434\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437-\u0437\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0440\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435.\" width=\"804\" height=\"730\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/320\/531\/51e\/32053151e738e97aa047fb9f8c760a34.png\"\/><figcaption>\u0412 \u0440\u0430\u0439\u043e\u043d\u0435 16:00 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u0435\u043f\u043b\u0435\u043b\u043e \u0438 \u0441\u0442\u0430\u043b\u043e \u0432\u0438\u0434\u043d\u043e \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 &#171;\u0428\u0418\u041c&#187; \u0438 &#171;\u0432\u044b\u043a\u043b&#187;. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0440\u0435\u0434\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437-\u0437\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0440\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435.<\/figcaption><\/figure>\n<p>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0431\u043e\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0435 \u043a\u0430\u043a 0\/1\/2, \u0430 \u043a\u0430\u043a \u0441\u043a\u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0428\u0418\u041c\u0430, \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u043e\u0442 0 \u0434\u043e 1. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a 1 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0428\u0418\u041c, \u043d\u043e \u043a\u0430\u043a\u0430\u044f \u0442\u0430\u043c \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u042f \u0441\u0430\u043c \u0432\u0438\u0434\u0435\u043b, \u043a\u0430\u043a \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u043c \u0428\u0418\u041c\u0435 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430 \u043d\u0435 \u0433\u043e\u0440\u0435\u043b\u0430, \u0432\u0438\u0434\u0438\u043c\u043e \u0433\u0434\u0435-\u0442\u043e \u043f\u0440\u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0438 \u0447\u0438\u0441\u043b\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u0432 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043d\u0443\u043b\u044e. \u041f\u043e\u043a\u0430 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u044b\u0448\u0435\u043b \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0435 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/562\/c22\/205\/562c22205bf057b57c981c574bdf8d7c.png\" alt=\"\u0421\u043c. \u043d\u0430 \u0437\u0435\u043b\u0451\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e: \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u043c\u0435\u043d\u0435\u0435 3 \u0441\u0443\u0442\u043e\u043a \u0441\u043a\u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 20%. \u0420\u043e\u0437\u043e\u0432\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f \u2014 \u0444\u0435\u0439\u043a.\" title=\"\u0421\u043c. \u043d\u0430 \u0437\u0435\u043b\u0451\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e: \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u043c\u0435\u043d\u0435\u0435 3 \u0441\u0443\u0442\u043e\u043a \u0441\u043a\u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 20%. \u0420\u043e\u0437\u043e\u0432\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f \u2014 \u0444\u0435\u0439\u043a.\" width=\"835\" height=\"296\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/562\/c22\/205\/562c22205bf057b57c981c574bdf8d7c.png\"\/><figcaption>\u0421\u043c. \u043d\u0430 \u0437\u0435\u043b\u0451\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e: \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u043c\u0435\u043d\u0435\u0435 3 \u0441\u0443\u0442\u043e\u043a \u0441\u043a\u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 20%. \u0420\u043e\u0437\u043e\u0432\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f \u2014 \u0444\u0435\u0439\u043a.<\/figcaption><\/figure>\n<p>\u0415\u0449\u0451 \u0438\u0437 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432: \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043d\u0430 \u043b\u044e\u0431\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043d\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u0445\u043e\u0442\u0435\u043b \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0451\u0442\u043d\u0443\u044e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u0430 \u0438 \u0432 \u041c\u041a, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<pre><code>(   2.0 * temperature{folderId=\"&lt;folderId>\", service=\"custom\", address=\"250300A2799A4F28\"}     + temperature{folderId=\"&lt;folderId>\", service=\"custom\", address=\"A50300A279D11E28\"} ) \/ 3.0<\/code><\/pre>\n<p>\u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 sum (\u043c\u0435\u0442\u0440\u0438\u043a\u0430) by (address) \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u043b\u043e. \u0423\u0432\u044b, \u044d\u0442\u043e \u043d\u0435 PromQL. \u041d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e, \u043d\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0435\u0448\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430.<\/p>\n<h2>\u041f\u0440\u043e \u0434\u0435\u043d\u044c\u0433\u0438<\/h2>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u042f\u043d\u0434\u0435\u043a\u0441 \u0432\u044b\u0434\u0430\u0451\u0442 \u0433\u0440\u0430\u043d\u0442 \u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u0440\u043e\u043a. \u041c\u043e\u0439 \u0438\u0441\u0442\u0435\u043a\u0430\u0435\u0442 \u0443\u0436\u0435 20 \u043d\u043e\u044f\u0431\u0440\u044f. \u041a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0438\u0437 \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0445 4000 \u20bd \u044f \u043f\u0440\u0438 \u0432\u0441\u0451\u043c \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0441\u043c\u043e\u0433 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 3 \u20bd:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/916\/e8e\/eeb\/916e8eeeb90623eb0088dc3436582996.png\" alt=\"\u041e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0433 \u043f\u0440\u043e\u043a\u0443\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u043f\u043e \u043f\u043e\u043b\u043d\u043e\u0439.\" title=\"\u041e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0433 \u043f\u0440\u043e\u043a\u0443\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u043f\u043e \u043f\u043e\u043b\u043d\u043e\u0439.\" width=\"984\" height=\"318\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/916\/e8e\/eeb\/916e8eeeb90623eb0088dc3436582996.png\"\/><figcaption>\u041e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0433 \u043f\u0440\u043e\u043a\u0443\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u043f\u043e \u043f\u043e\u043b\u043d\u043e\u0439.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/093\/aa3\/3d1\/093aa33d156c9407ec2d524475b36c2e.png\" alt=\"\u0414\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\" title=\"\u0414\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\" width=\"689\" height=\"299\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/093\/aa3\/3d1\/093aa33d156c9407ec2d524475b36c2e.png\"\/><figcaption>\u0414\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/figcaption><\/figure>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043b\u0430\u0431\u044b\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u0433\u0434\u0435 \u0441\u0430\u043c\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\/\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u041e\u0421, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c docker, gitlab-runner \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438\u0437 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 Prometheus + Grafana, \u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u043d \u0431\u044b \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u043b \u0438 \u043f\u0440\u043e\u0436\u0438\u0433\u0430\u043b \u0434\u0435\u043d\u044c\u0433\u0438.<\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b \u0438 \u043f\u0440\u043e \u0431\u0443\u0434\u0443\u0449\u0435\u0435<\/h2>\n<p>\u042f \u043f\u043e\u0442\u0440\u043e\u0433\u0430\u043b \u0440\u0443\u043a\u0430\u043c\u0438 \u0442\u043e, \u0447\u0442\u043e \u0434\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u2014 \u043d\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0412 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0441\u0432\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u043b\u0430\u0441\u0441\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430. \u0422\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b.<\/p>\n<p>\u0412\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a Telegram-\u0431\u043e\u0442\u0430, \u043d\u043e \u0442\u0430\u043c \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e know-how. \u0415\u0449\u0451 \u043e\u0434\u0438\u043d serverless-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e http-\u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u043d\u043e \u0438 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0443. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043e\u043f\u044f\u0442\u044c Spring Native, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 node.js.<\/p>\n<p>\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0440\u043e\u0437\u043e\u0432. \u0415\u0441\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u0434\u0430, \u0447\u0442\u043e \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0432 \u044f\u0449\u0438\u043a\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u043b\u0438\u0447\u043d\u043e\u0439 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0441\u0435\u0431\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u043e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0435 \u0432\u043d\u0443\u0442\u0440\u0438, \u0435\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432\u044b\u0439\u0434\u0443\u0442 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f \u0434\u0432\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0442\u0435\u0440\u043c\u043e\u0434\u0430\u0442\u0447\u0438\u043a\u0430. \u0422\u0443\u0442 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443.<\/p>\n<\/p>\n<\/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\/articles\/697438\/\"> https:\/\/habr.com\/ru\/articles\/697438\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><strong>\u26a0\ufe0f Disclaimer<\/strong>: \u043e\u0431\u044b\u0447\u043d\u043e \u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e \u0441\u0432\u043e\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0444\u0440\u0430\u0437\u043e\u0439 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0451 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0434\u0438\u0447\u0430\u0439\u0448\u0438\u043c \u043e\u0432\u0435\u0440-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u043e\u043c. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 \u044f \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043e\u0431 \u044d\u0442\u043e\u0439 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0440\u0430\u043d\u0435\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u0442\u043e \u044d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u044b\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0436\u0430\u0439 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432: \u041e\u0421\u041f, \u0443\u0442\u0435\u043f\u043b\u0438\u0442\u0435\u043b\u044f, ESP8266, \u043a\u0435\u0440\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u043f\u0442\u0438\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 Yandex.Cloud. \u0423\u0441\u043f\u0435\u0448\u043d\u043e \u043b\u0438 \u2014 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0441\u043d\u0430.<\/p>\n<hr\/>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0421\u0442\u0430\u043d\u0438\u0441\u043b\u0430\u0432, \u0438 \u044f Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0414\u0432\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u044f \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u0432 \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0434\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0433\u043e\u0434 \u0437\u0435\u043c\u043b\u044f \u0432\u043e\u0437\u043b\u0435 \u043d\u0435\u0433\u043e \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u043b\u0430, \u0442\u043e \u044d\u0442\u0438\u043c \u043b\u0435\u0442\u043e\u043c \u043c\u044b \u0441 \u0436\u0435\u043d\u043e\u0439 \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0430\u0448\u0443 \u0441\u0435\u043c\u0435\u0439\u043d\u0443\u044e \u0436\u0438\u0437\u043d\u044c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u0430\u0434\u043e\u043a, \u0438 \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u0440\u0442\u043e\u0444\u0435\u043b\u044f. \u041a\u0430\u0440\u0442\u043e\u0448\u043a\u0430 \u0432\u044b\u0440\u043e\u0441\u043b\u0430 \u0431\u0435\u0437\u043e \u0432\u0441\u044f\u043a\u043e\u0439 \u0438\u043d\u0442\u0440\u0438\u0433\u0438, \u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u0430\u044f, \u043d\u0435 \u043f\u043b\u043e\u0445\u0430\u044f, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u0430\u044f. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u0430 \u0438 \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 (\u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u0442\u0430\u043a-\u0442\u043e: \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 13-15 \u0432\u0435\u0434\u0435\u0440 \u043e\u0442\u0431\u043e\u0440\u043d\u043e\u0439) \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0431 \u0435\u0451 \u0437\u0438\u043c\u043d\u0435\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0418\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0431\u044b\u043b\u0438 \u043d\u0435 \u0431\u0435\u0437 \u043c\u0438\u043d\u0443\u0441\u043e\u0432: \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u043e\u0433\u0440\u0435\u0431 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 45 \u043a\u043c \u043f\u0440\u043e\u0435\u0437\u0434\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0441\u044c \u0446\u0435\u043d\u0442\u0440 \u0433\u043e\u0440\u043e\u0434\u0430, \u0432 \u0434\u043e\u043c\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u0435\u043f\u043b\u043e \u2014 \u043f\u0440\u043e\u0440\u0430\u0441\u0442\u0451\u0442, \u0430 \u0432 \u043d\u0435\u0443\u0442\u0435\u043f\u043b\u0451\u043d\u043d\u043e\u043c \u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0445\u043e\u043b\u043e\u0434\u043d\u043e (\u0437\u0438\u043c\u043e\u0439 \u0434\u043e -35 \u00b0C). \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0432 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0433\u0434\u0435-\u0442\u043e \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0433\u0440\u0435\u0431, \u043d\u043e \u043a \u044d\u0442\u043e\u0439 \u0437\u0438\u043c\u0435 \u043e\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u043e.<\/p>\n<p>\u041c\u044b\u0441\u043b\u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0440\u0430 \u0447\u0442\u043e-\u0442\u043e \u0440\u0435\u0448\u0430\u0442\u044c, \u0441\u0438\u0434\u0435\u043b\u0438 \u0432 \u043c\u043e\u0435\u0439 \u0433\u043e\u043b\u043e\u0432\u0435 \u0443\u0436\u0435 \u0432\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e, \u0438 \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0437\u0438\u043c\u044b. \u041a\u0430\u043a \u0432\u0434\u0440\u0443\u0433, \u043e\u0433\u043b\u044f\u0434\u0435\u0432\u0448\u0438\u0441\u044c \u0432 \u0441\u0430\u0440\u0430\u0435 \u043d\u0430 \u0442\u0435 \u0441\u0442\u0440\u043e\u0439\u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c, \u043c\u0435\u043d\u044f \u043f\u043e\u0441\u0435\u0442\u0438\u043b \u043f\u043b\u0430\u043d\u2026<\/p>\n<h2>\u201c\u0423 \u043c\u0435\u043d\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0432\u0441\u0451 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c\u201d<\/h2>\n<figure class=\"full-width\"><figcaption>\u0418\u0437 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0447\u0430\u0442\u0438\u043a\u0430.<\/figcaption><\/figure>\n<p>\u041a\u043e\u043b\u043b\u0435\u0433\u0438 \u043d\u0430\u0434\u043e \u043c\u043d\u043e\u0439 \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u0448\u0443\u0442\u044f\u0442 \u043c\u0435\u043c\u0430\u043c\u0438. \u041d\u0435 \u0440\u0430\u0437 \u0438 \u043d\u0435 \u0434\u0432\u0430 \u043f\u0440\u043e\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u043b\u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u0430 \u043c\u044b\u0441\u043b\u044c, \u043f\u0440\u0438 \u0432\u0437\u0433\u043b\u044f\u0434\u0435 \u043d\u0430 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0438 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437. \u0427\u0442\u043e \u0436\u0435 \u0431\u044b\u043b\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439?<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u043b\u0442\u043e\u0440\u0430 <a href=\"https:\/\/leroymerlin.ru\/product\/plita-osp-3-murom-12-mm-2500x1250-mm-3125-m-89137643\/\" rel=\"noopener noreferrer nofollow\">\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043b\u0438\u0441\u0442\u0430 \u041e\u0421\u041f<\/a> (<em>OSB, oriented strand board<\/em>) \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 2,5\u043c\u00d71,25\u043c\u00d712\u043c\u043c \u0438 \u0435\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0435\u0437\u043a\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0435\u043c\u044c \u043f\u043b\u0438\u0442 \u0442\u0435\u0445\u043d\u043e\u043d\u0438\u043a\u043e\u043b\u0435\u0432\u0441\u043a\u043e\u0433\u043e XPS \u0443\u0442\u0435\u043f\u043b\u0438\u0442\u0435\u043b\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u043e\u0439 50\u043c\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0430 Wemos D1 Mini Pro (<a href=\"https:\/\/aliexpress.ru\/item\/1005003042175839.html\" rel=\"noopener noreferrer nofollow\"><u>\u043f\u043e\u0445\u043e\u0436<\/u><\/a>).<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0438 <a href=\"https:\/\/aliexpress.ru\/item\/4000068914916.html\" rel=\"noopener noreferrer nofollow\"><u>DS18B20 \u0432 \u0433\u0435\u0440\u043c\u0435\u0442\u0438\u0447\u043d\u044b\u0445 \u043a\u0430\u043f\u0441\u0443\u043b\u0430\u0445<\/u><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0432\u0430 \u0442\u0432\u0435\u0440\u0434\u043e\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u043b\u0435 \u043d\u0430 220 \u0412 \u0440\u0430\u0437\u043d\u043e\u0439 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 (<a href=\"https:\/\/aliexpress.ru\/item\/32981687291.html\" rel=\"noopener noreferrer nofollow\"><u>\u0440\u0430\u0437<\/u><\/a> \u0438 <a href=\"https:\/\/aliexpress.ru\/item\/32889489536.html\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u0432\u0430<\/u><\/a>).<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0442\u0440\u043e\u043d\u044b \u0438 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438 \u043d\u0430\u043a\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u044f, \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u043e \u0432\u0440\u0435\u043c\u0451\u043d \u0434\u043e \u043e\u0442\u0434\u0435\u043b\u043a\u0438 \u0434\u043e\u043c\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0434\u0435\u044f \u0431\u044b\u043b\u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u044e \u0438\u0437 XPS \u043f\u043b\u0438\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 1\u00d71\u00d70.5 \u0448\u0442. \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044f\u0449\u0438\u043a. \u041f\u043e\u0434\u0433\u043e\u043d\u044f\u044e \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u043a\u0430\u0440\u043a\u0430\u0441 \u0438\u0437 \u041e\u0421\u041f, \u0441\u0442\u044f\u0433\u0438\u0432\u0430\u044e \u0443\u0433\u043e\u043b\u043a\u0430\u043c\u0438. \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u0448\u0438\u0432\u0430\u044e \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u0439 \u043f\u043b\u0451\u043d\u043a\u043e\u0439. \u0412\u043d\u0443\u0442\u0440\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e ESP8266, \u043e\u043d \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 1-wire \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432, \u0447\u0435\u0440\u0435\u0437 \u0428\u0418\u041c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u043e\u0439 \u043d\u0430\u043a\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0433\u0440\u0435\u0435\u0442 \u0432\u043e\u0437\u0434\u0443\u0445. \u041f\u043b\u044e\u0441 <a href=\"https:\/\/www.dns-shop.ru\/product\/5a69f427fd723332\/\" rel=\"noopener noreferrer nofollow\"><u>\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 USB-\u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440<\/u><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u043d\u044f\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u043e\u0437\u0434\u0443\u0445.<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u043e\u0442\u043e \u0441 \u044d\u0442\u0430\u043f\u0430 \u0441\u0431\u043e\u0440\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption>\u0412\u043e\u0442 \u043e\u043d\u0430 \u0441\u0442\u043e\u0438\u0442 \u0438 \u043c\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0430.<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u041e\u0431\u0440\u0435\u0437\u0430\u043b \u0443 XPS \u043f\u0430\u0437\u044b, \u0441\u0442\u044f\u043d\u0443\u043b \u0441\u043a\u043e\u0442\u0447\u0435\u043c.<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u041d\u0430\u0447\u0438\u043d\u0430\u044e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0440\u043a\u0430\u0441 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443.<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u0412 \u043d\u0435\u0433\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043a\u043e\u0440\u043e\u0431 \u0438\u0437 XPS.<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u043e\u043a\u043b\u0435\u0438\u0432\u0430\u044e \u0432\u0441\u0435 \u0441\u0442\u044b\u043a\u0438 \u0430\u043b\u044e\u043c\u0438\u043d\u0438\u0435\u0432\u043e\u0439 \u043b\u0435\u043d\u0442\u043e\u0439. \u0415\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0440\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0430\u043d\u0442\u0438\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u043a\u043b\u0435\u0435\u043d\u044b \u0430\u043b\u044e\u043c\u0438\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043a\u043e\u0442\u0447\u0435\u043c.<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u041a\u0443\u043f\u0438\u043b \u0432 \u041b\u0435\u0440\u0443\u0430 \u041c\u0435\u0440\u043b\u0435\u043d\u0435 \u0437\u0430 ~ 300 \u0440\u0443\u0431\u043b\u0435\u0439 5 \u043a\u0432.\u043c. \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u0439 \u043f\u043b\u0451\u043d\u043a\u0438 \u0442\u043e\u043b\u0449\u0438\u043d\u043e\u0439 3 \u043c\u043c. \u041a\u0441\u0442\u0430\u0442\u0438, \u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0441\u0447\u0451\u0442 \u2014 \u043f\u043b\u0451\u043d\u043a\u0443 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0446\u0435\u043f\u0438\u0442\u044c \u0441\u0442\u0435\u043f\u043b\u0435\u0440\u043e\u043c \u043a XPS, \u0441\u043a\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0442. \u041f\u043e\u043a\u0430 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438 \u0442\u0430\u043a, \u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u043a\u043b\u0435\u0438\u0442\u044c.<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u044f\u0449\u0438\u043a\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0430, \u043f\u0440\u0438\u043c\u0435\u0440\u044f\u0435\u043c\u0441\u044f:<\/p>\n<figure class=\"full-width\"><figcaption>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u043e \u0440\u0435\u0431\u0440\u0443 \u041e\u0421\u041f \u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044f\u0449\u0438\u043a\u0430, \u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u0440\u044b\u0448\u043a\u0438 \u043d\u0430\u043a\u043b\u0435\u0435\u043d\u0430 \u043f\u043e\u043b\u043e\u0441\u043a\u0430 \u0431\u0435\u043b\u043e\u0433\u043e \u043c\u044f\u0433\u043a\u043e\u0433\u043e \u0443\u0442\u0435\u043f\u043b\u0438\u0442\u0435\u043b\u044f. \u0421 \u043d\u0435\u0439 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0435\u0440\u043c\u0435\u0442\u0438\u0447\u043d\u043e.<\/figcaption><\/figure>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u043e\u0448\u043a\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0451 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u0410 \u0432\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0451 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0448\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043e\u0431\u043e\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044f, \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043f\u0440\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0440\u043a\u043e\u0432\u043a\u0438 \u0438 \u0441\u0432\u0451\u043a\u043b\u044b!<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0432 \u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445 \u0435\u0449\u0451 \u043b\u0435\u0436\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0435\u0437\u043a\u043e\u0432 \u041e\u0421\u041f \u0438 \u043f\u0430\u0440\u0430 \u043b\u0438\u0441\u0442\u043e\u0432 XPS. \u0414\u0435\u043b\u0430\u044e \u043e\u0431\u044a\u0451\u043c\u043d\u0443\u044e \u043a\u0440\u044b\u0448\u043a\u0443, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u0430\u043b\u043b\u0435\u0442\u0443 \u0432\u043d\u0438\u0437\u0443 \u0434\u043b\u044f \u0446\u0438\u0440\u043a\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0435\u043a\u0430\u044e\u0449\u0435\u0439 \u0432\u043b\u0430\u0433\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0415\u0449\u0451 \u043f\u0430\u0440\u0430 \u0444\u043e\u0442\u043e \u0441\u0431\u043e\u0440\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption>\u041f\u0430\u043b\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u043e\u044f\u0442\u044c \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043d\u043e\u0436\u043a\u0430\u0445. \u0412 \u0446\u0435\u043b\u043e\u043c \u043e\u043d\u0430 \u0445\u043b\u0438\u043f\u043a\u0430\u044f \u0438 \u043f\u0440\u043e\u0433\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439, \u043d\u043e \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u0434\u0430\u0436\u0435 \u043c\u0435\u043d\u044f.<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u041f\u043e\u0440\u043e\u0436\u043d\u044f\u043a\u043e\u043c. XPS \u0441\u0442\u0435\u043d \u0438 \u043a\u0440\u044b\u0448\u043a\u0438 \u043d\u0435 \u043d\u0430 100% \u043f\u043b\u043e\u0442\u043d\u043e \u043f\u0440\u0438\u043b\u0435\u0433\u0430\u0435\u0442 \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0437\u043e\u0440, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.<\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"\"><figcaption>\u0421\u043e\u0431\u0440\u0430\u043d\u043e, \u0441\u043a\u0440\u0443\u0447\u0435\u043d\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u043e, \u043f\u043e\u0434\u0440\u0435\u0437\u0430\u043d\u043e. \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e.<\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<\/p>\n<h2>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043a\u043e\u0434\u0438\u0442\u044c<\/h2>\n<p>\u041f\u043e\u0441\u0442\u0440\u043e\u0438\u0432 \u044f\u0449\u0438\u043a, \u043d\u0430\u0447\u0438\u043d\u0430\u044e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0441\u043e\u0444\u0442\u0443.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0442\u0440\u0438 \u0442\u0435\u0440\u043c\u043e\u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u0434\u0432\u0430 \u0441 \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u043c\u0438 \u043f\u043e\u043a\u043e\u0440\u043e\u0447\u0435, \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u043b\u0438\u043d\u043d\u0435\u0435. \u0414\u0432\u0430 \u043f\u043e\u043a\u043e\u0440\u043e\u0447\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0449\u0438\u043a\u0430, \u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u0443\u043b\u0438\u0446\u0443. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0441\u0431\u043e\u0440\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432:<\/p>\n<details class=\"spoiler\">\n<summary>temperature.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef TEMPERATURE_H #define TEMPERATURE_H  #include &lt;OneWire.h> #include &lt;DallasTemperature.h>  \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0438\u043c \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f. #define ONE_WIRE_PULLUP  3  \/\/ \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b. #define TEMPERATURE_SENSORS_COUNT  4  \/\/ \u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u043d\u0441\u043e\u0440 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. #define ERRONEOUS_VALUE -150.0f  class TEMPERATURE_RESULT { private:   uint8_t devices;   uint64_t addresses[TEMPERATURE_SENSORS_COUNT];   float values[TEMPERATURE_SENSORS_COUNT];  public:   inline TEMPERATURE_RESULT(uint8_t devices, uint64_t addresses[], float values[]) {     this->devices = std::min((int) devices, TEMPERATURE_SENSORS_COUNT);     for(uint8_t idx = 0; idx &lt; this->devices; idx += 1) {       this->addresses[idx] = addresses[idx];       this->values[idx] = values[idx];     }   }    inline uint8_t getDeviceCount() {     return devices;   }    inline uint64_t getAddress(uint8_t idx) {     return 0 &lt;= idx &amp;&amp; idx &lt; devices       ? addresses[idx]       : -1;   }    inline float getValue(uint8_t idx) {     return 0 &lt;= idx &amp;&amp; idx &lt; devices       ? values[idx]       :ERRONEOUS_VALUE;   }    inline float getValueByAddress(uint64_t address) {     for(uint8_t idx = 0; idx &lt; devices; idx += 1) {       if (addresses[idx] == address) {         return values[idx];       }     }      return ERRONEOUS_VALUE;   } };  class OneWireDS18B20Measurer { private:   DallasTemperature *sensors; public:   inline OneWireDS18B20Measurer(DallasTemperature *dallasTemperature) {     this->sensors = dallasTemperature;   }   void setup();   TEMPERATURE_RESULT measure(); };  #endif \/\/ TEMPERATURE_H<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>temperature.cpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"common.h\" #include \"temperature.h\"  void OneWireDS18B20Measurer::setup() {   this->sensors->begin(); }  TEMPERATURE_RESULT OneWireDS18B20Measurer::measure() {   DallasTemperature &amp; DT = * this->sensors;      DT.requestTemperatures();    uint8_t devices = DT.getDeviceCount();   uint64_t addresses[TEMPERATURE_SENSORS_COUNT];   float values[TEMPERATURE_SENSORS_COUNT];    for(uint8_t idx = 0; idx &lt; devices; idx += 1) {     if (TEMPERATURE_SENSORS_COUNT &lt;= idx) {       break;     }      DT.getAddress((uint8_t *) &amp; addresses[idx], idx);     values[idx] = DT.getTempCByIndex(idx);      Serial.printf(\"Sensor %llX temperature is %.1f C.\\n\", addresses[idx], values[idx]);   }    return TEMPERATURE_RESULT(devices, addresses, values); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043d\u044f\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u044b\u0440\u044b\u043c\u0438. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0445 \u043f\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0438\u0432\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u0441\u043b\u043e\u0432\u043d\u0443\u044e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0449\u0438\u043a\u0430. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u0430 \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u0437 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f (\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c, \u0447\u0442\u043e DS18B20 \u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0442\u044b \u0432 \u0441\u0432\u043e\u0451\u043c \u0430\u0434\u0440\u0435\u0441\u0435).<\/p>\n<details class=\"spoiler\">\n<summary>model.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef MODEL_H #define MODEL_H  #include \"temperature.h\"  extern float calcApproximateInternalTemperature(TEMPERATURE_RESULT raw);  #endif \/\/ MODEL_H<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>model.cpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"model.h\"  const uint64_t OUTSIDE_SENSOR_ADDRESS = 0xA40119282FCCCC28; \/\/ \u0421\u0430\u043c\u044b\u0439 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u043e\u0434. const uint64_t HEATERS_SENSOR_ADDRESS = 0xA50300A279D11E28; \/\/ \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439, \u0431\u0435\u0437 \u0443\u0437\u0435\u043b\u043a\u0430. const uint64_t BOTTOM_SENSOR_ADDRESS  = 0x250300A2799A4F28; \/\/ \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439, \u0437\u0430\u0432\u044f\u0437\u0430\u043d \u0443\u0437\u0435\u043b\u043a\u043e\u043c.  float calcApproximateInternalTemperature(TEMPERATURE_RESULT raw) {   float outsideTemperature = raw.getValueByAddress(OUTSIDE_SENSOR_ADDRESS);   float heatersTemperature = raw.getValueByAddress(HEATERS_SENSOR_ADDRESS);   float bottomTemperature = raw.getValueByAddress(BOTTOM_SENSOR_ADDRESS);    \/\/ \u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043e\u0431\u0430 \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0432\u044b\u0448\u043b\u0438 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f?   if (heatersTemperature &lt;= ERRONEOUS_VALUE &amp;&amp; bottomTemperature &lt;= ERRONEOUS_VALUE) {     \/\/ TODO: \u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \"\u0443 \u043d\u0430\u0441 \u043c\u0435\u0433\u0430-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\".     \/\/ \u041f\u043e\u043a\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b \u043e\u0431\u043e\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0436\u0435\u0447\u044c \u0432\u0441\u0451 \u043d\u0430\u0445\u0440\u0435\u043d.     return 123.0f;   }      \/\/ \u0412 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u043d\u0441\u043e\u0440 \u043f\u043e\u0434 \u043f\u043e\u0434\u0434\u043e\u043d\u043e\u043c.   if (heatersTemperature &lt;= ERRONEOUS_VALUE) {     return bottomTemperature;   }    \/\/ \u0412 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u043d\u0441\u043e\u0440 \u043e\u043a\u043e\u043b\u043e \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   if (bottomTemperature &lt;= ERRONEOUS_VALUE) {     return heatersTemperature;   }    \/\/ \u041e\u0431\u0430 \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c \u0431\u043b\u0438\u0436\u0435 \u043a \u043f\u043e\u0434\u0434\u043e\u043d\u0443.   return (2.0f * bottomTemperature + heatersTemperature) \/ 3.0f; }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0442\u043e\u043c \u0434\u0430\u043b\u0451\u043a\u043e\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043f\u043e\u0433\u0440\u0435\u0431\u0435 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0431\u044b\u043b \u043e\u043f\u044b\u0442 \u0432 \u0441\u0430\u043c\u044b\u0435 \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0440\u043e\u0437\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0443 \u043d\u0430\u043a\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430. \u041a\u0430\u0440\u0442\u043e\u0448\u043a\u0430 \u043e\u0442 \u043d\u0435\u0451, \u043a\u0441\u0442\u0430\u0442\u0438, \u043d\u0435 \u043f\u0440\u043e\u0440\u0430\u0441\u0442\u0430\u0435\u0442. \u041d\u043e \u0442\u0430\u043c \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u044f\u0449\u0438\u043a, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u0435\u0437 \u043e\u043f\u0430\u0441\u043a\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0446\u0435\u043b\u044b\u0439 \u043c\u0435\u0441\u044f\u0446. \u0412 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0432\u0441\u0451 \u0438\u043d\u0430\u0447\u0435 \u2014 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0451 \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0434\u043b\u0438\u0442\u044c \u0441\u0440\u043e\u043a \u0441\u043b\u0443\u0436\u0431\u044b, \u0430 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0431\u043e\u0440.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0433\u043e \u0428\u0418\u041c, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0440\u0430\u0441\u0441\u044b\u043f\u0430\u043b\u0430\u0441\u044c \u0432 \u043f\u0440\u0430\u0445 \u0438\u0437-\u0437\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 zero-crossing \u043d\u0430 \u043e\u0431\u043e\u0438\u0445 \u043c\u043e\u0438\u0445 \u0440\u0435\u043b\u0435 \u2014 \u043f\u0440\u0438 \u043f\u043e\u0434\u0430\u0447\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0444\u0440\u043e\u043d\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043b\u0438\u043d\u0438\u044f\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u043e\u043b\u044c. \u042d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u043e \u043c\u0435\u043d\u044f \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0428\u0418\u041c\u0430 \u0434\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u043a\u043e\u043b\u043e 10 \u0413\u0446. \u041d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0441\u0435\u0442\u0438 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044f\u0440\u043a\u043e\u0441\u0442\u044c\u044e, \u043f\u043e \u0441\u0443\u0442\u0438, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u0442. \u0417\u0430\u0442\u043e \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 10 \u0413\u0446 \u044d\u0442\u043e \u043d\u0435 \u0443\u0436\u0435 \u043d\u0435 \u0428\u0418\u041c, \u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u0431\u043e\u0441\u043a\u043e\u043f \u2014 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0433\u043e\u0440\u0435\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u0442\u0443\u0445\u043d\u0443\u0442\u044c. \u042d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0435 \u043c\u043d\u043e\u0439 &#171;\u043f\u0440\u043e\u0434\u043b\u0435\u043d\u0438\u0435 \u0436\u0438\u0437\u043d\u0438 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438&#187;, \u043d\u0443 \u043a\u0440\u043e\u043c\u0435 \u0441\u0430\u043c\u043e\u0433\u043e ZC \u2014 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043d\u0443\u043b\u044f \u044d\u0442\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0431\u043e\u043b\u0435\u0435 \u0449\u0430\u0434\u044f\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u044b\u0439 \u0440\u0438\u0441\u043a \u043f\u0435\u0440\u0435\u0433\u043e\u0440\u0430\u043d\u0438\u044f \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438, \u044f \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u043b\u0435. \u043d\u0435 \u0438\u043c\u0435\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u043c\u043e\u0440\u0433\u0430\u044e\u0449\u0435\u0439<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-413621","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/413621","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=413621"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/413621\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=413621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=413621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=413621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}