{"id":488354,"date":"2026-07-23T15:43:20","date_gmt":"2026-07-23T15:43:20","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=488354"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=488354","title":{"rendered":"\u0423\u043c\u043d\u044b\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u043f\u043e\u0434\u043e\u0436\u0434\u0443\u0442: \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 ESP8266 \u0438 \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/18e\/e63\/64b\/18ee6364b5d02297706edd07af6d2d63.JPG\" width=\"1182\" height=\"764\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/18e\/e63\/64b\/18ee6364b5d02297706edd07af6d2d63.JPG 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/18e\/e63\/64b\/18ee6364b5d02297706edd07af6d2d63.JPG 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0448\u043b\u0430 \u0440\u0435\u0447\u044c <a href=\"https:\/\/habr.com\/ru\/articles\/1057502\/\" rel=\"noopener noreferrer nofollow\">\u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u043e\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab<em>\u0410 \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0448\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 (\u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043b\u0435\u043d\u0442\u043e\u0447\u043d\u044b\u0445 \u043f\u0438\u043b) \u0432 \u0441\u043c\u0435\u043d\u0443? \u041c\u043e\u0436\u0435\u0442, \u043f\u043e\u0432\u0435\u0441\u0438\u043c \u0443\u043c\u043d\u044b\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430?<\/em>\u00bb<\/p>\n<p><strong>\u0421\u043f\u043e\u0439\u043b\u0435\u0440:<\/strong> \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0438 \u0432 \u0440\u0430\u0437\u044b \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0447\u0435\u043c \u043f\u043e \u0443\u043c\u043d\u044b\u043c \u043a\u0430\u043c\u0435\u0440\u0430\u043c! \u041f\u0440\u0438\u0447\u0435\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u043d\u0442\u043e\u0447\u043d\u044b\u0445 \u043f\u0438\u043b, \u043d\u043e \u0438 \u0440\u044f\u0434 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442: \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430, \u043c\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u044b \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e (PCB), \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, workflow n8n \u0438 \u043f\u043b\u0430\u043d\u044b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435.<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043e\u0431\u0440\u0430\u0449\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0432 \u0446\u0438\u0444\u0440\u0443 \u2014 <strong>\u0447\u0442\u043e \u043d\u0430\u043c \u044d\u0442\u043e \u0434\u0430\u0435\u0442? <\/strong><\/p>\n<hr\/>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043f\u043e\u044f\u0441\u043d\u044e \u043f\u0440\u043e \u043a\u0430\u043a\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u043b\u0430 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0447\u044c:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6df\/062\/7c7\/6df0627c7ee502d2f8102d12fc65cac1.png\" alt=\"\u0424\u043e\u0442\u043e \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 - \u043f\u0440\u0438\u043c\u0435\u0440 \u043b\u0435\u043d\u0442\u043e\u0447\u043d\u043e\u043f\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u043a\u0430 (ProTech BS-500DSA)\" title=\"\u0424\u043e\u0442\u043e \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 - \u043f\u0440\u0438\u043c\u0435\u0440 \u043b\u0435\u043d\u0442\u043e\u0447\u043d\u043e\u043f\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u043a\u0430 (ProTech BS-500DSA)\" width=\"1024\" height=\"778\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6df\/062\/7c7\/6df0627c7ee502d2f8102d12fc65cac1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6df\/062\/7c7\/6df0627c7ee502d2f8102d12fc65cac1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0424\u043e\u0442\u043e \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 &#8212; \u043f\u0440\u0438\u043c\u0435\u0440 \u043b\u0435\u043d\u0442\u043e\u0447\u043d\u043e\u043f\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u043a\u0430 (ProTech BS-500DSA)<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u044b\u0448\u0435 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043b\u0435\u043d\u0442\u043e\u043f\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0430\u043d\u043e\u043a: \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u0441 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440\u043e\u043c, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0434\u0430\u0447\u0438 \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u044e\u0449\u0435\u0439 \u0436\u0438\u0434\u043a\u043e\u0441\u0442\u0438 (\u0434\u043b\u044f \u0440\u0435\u0437\u043a\u0438 \u043c\u0435\u0442\u0430\u043b\u043b\u0430, \u043a\u0430\u043a \u0443 \u043d\u0430\u0441), \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0430\u0447\u0438 \u0440\u0435\u0436\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0442\u043d\u0430, \u0437\u0430\u0436\u0438\u043c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0430\u043c\u043e \u043f\u043e\u043b\u043e\u0442\u043d\u043e \u043d\u0430 \u043f\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u043c\u0435. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0430\u043d\u043a\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0447\u0430\u0441\u0442\u043a\u0430, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b. \u041d\u043e, \u0442\u0430\u043a \u0431\u044b\u0432\u0430\u0435\u0442, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u043d\u044b\u043d\u0435\u0448\u043d\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u044f\u0445, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0443 (\u0438\u043b\u0438 \u043c\u0435\u0430\u043d\u0434\u0440, \u043a\u043e\u043c\u0443 \u043a\u0430\u043a \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f). \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0438\u043b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u0431\u0449\u0438\u0439 \u0441\u0440\u043e\u043a \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u0438, \u0434\u0435\u043b\u0430\u044f \u044d\u0442\u043e\u0442 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u043c.<\/p>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441 \u043e \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0442\u043e\u0447\u0435\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0447\u0430\u0441\u0442\u043a\u0430. \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u043e \u0432 \u043a\u0430\u043c\u0435\u0440\u044b \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f, \u00ab\u043d\u0430 \u0433\u043b\u0430\u0437\u00bb \u043f\u0440\u0438\u043a\u0438\u043d\u0443\u043b\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u0442\u0430\u043d\u043a\u0430 \u0438 \u0432\u044b\u043d\u0435\u0441\u043b\u043e \u0432\u0435\u0440\u0434\u0438\u043a\u0442: \u0446<em>\u0435\u043b\u0435\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u2014 \u0432\u0441\u0435\u0433\u043e 30-40%, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0439.<\/em> \u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0442\u043e \u0431\u043e\u043b\u0442\u0430\u0435\u0442, \u0442\u043e \u0432 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u0441\u0438\u0434\u0438\u0442, \u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u0434\u0435-\u0442\u043e \u0445\u043e\u0434\u0438\u0442. \u0418\u043c\u0435\u044f \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 ESP8266\/ESP32 \u044f \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443: \u00ab<em>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0438\u043d\u0432\u0430\u0437\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0441\u043d\u044f\u0442\u044c \u0447\u0435\u0441\u0442\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443<\/em>\u00bb.<\/p>\n<p><strong>\u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f: \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430 \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 \u043f\u043e\u0440\u0442\u0430<\/strong><\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430 \u0441\u0442\u0430\u043d\u043a\u043e\u0432 \u2014 \u0432\u0437\u044f\u043b\u0438 \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438, \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u044b\u043b \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d \u0434\u0430\u0442\u0447\u0438\u043a \u0442\u043e\u043a\u0430 SCT-013-015 (\u043d\u0430 15\u0410), \u043f\u043b\u0430\u0442\u0430 NodeMCU Lolin v3 (\u043d\u0430 \u0431\u0430\u0437\u0435 ESP8266), M5Stack ATOM Lite (\u043d\u0430 \u0431\u0430\u0437\u0435 ESP32) \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0432\u0435\u0441\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b, \u0438 \u0443\u0436\u0435 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. \u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0430 M5Stack ATOM Lite, \u0430 \u043f\u0438\u043b\u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043d\u0430 NodeMCU Lolin v3 &#8212; \u0438\u043c\u0435\u043d\u043d\u043e \u043e \u043d\u0435\u043c \u0434\u0430\u043b\u0435\u0435 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0440\u0435\u0447\u044c, \u0445\u043e\u0442\u044f, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u0444\u043e\u0442\u043e \u0441 \u0410\u0442\u043e\u043c\u043e\u043c.<\/p>\n<p>\u041d\u0443\u043b\u0435\u0432\u043e\u0439, \u0447\u0438\u0441\u0442\u043e \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441 \u0441\u0432\u044f\u0437\u043a\u0438, \u044d\u0442\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440 \u0442\u043e\u043a\u0430 SCT-013-015 \u0432\u044b\u0434\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b (\u043e\u0442 -1V \u0434\u043e +1V), \u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0432\u0445\u043e\u0434 \u0443\u043c\u0435\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 (\u043e\u0442 0V \u0434\u043e 3.3V). \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u0415\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u00ab\u043f\u043e\u0434\u043d\u044f\u0442\u044c\u00bb \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0432\u0432\u0435\u0440\u0445, \u0447\u0442\u043e\u0431\u044b \u0435\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0446\u0435\u043d\u0442\u0440 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0432\u0445\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (\u043d\u0430 \u043e\u0442\u043c\u0435\u0442\u043a\u0435 1.65V). \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u043b\u043d\u0430 \u043a\u043e\u043b\u0435\u0431\u043b\u0435\u0442\u0441\u044f \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0434\u043b\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435: \u043e\u0442 0.65V \u0434\u043e 2.65V. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0440\u0435\u0437\u0438\u0441\u0442\u0438\u0432\u043d\u044b\u043c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0432\u043d\u044b\u0445 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0432 (\u0432\u0437\u044f\u043b \u043f\u043e 10 \u043a\u041e\u043c), \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0448\u0438\u043d\u043e\u0439 \u043f\u0438\u0442\u0430\u043d\u0438\u044f (3.3V) \u0438 GND. \u0418\u0445 \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0442\u043e\u0447\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u041e\u0434\u0438\u043d \u0432\u044b\u0432\u043e\u0434 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 SCT-013-015 (\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0442\u0435\u043a\u0435\u0440\u0430) \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 (\u043a\u043e\u043d\u0447\u0438\u043a) \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0432\u0445\u043e\u0434 A0 NodeMCU. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c \u0432\u0445\u043e\u0434 A0 \u00ab\u0432\u0438\u0434\u0438\u0442\u00bb \u0441\u0443\u043c\u043c\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u0447\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0443\u0445\u043e\u0434 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u044b \u0432 \u043e\u043f\u0430\u0441\u043d\u0443\u044e \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0437\u043e\u043d\u0443.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/478\/a94\/5b3\/478a945b3c062a741dac8f6a2cbb0ed5.jpg\" alt=\"\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f SCT-013-015 \u043a NodeMCU\" title=\"\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f SCT-013-015 \u043a NodeMCU\" width=\"478\" height=\"284\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/478\/a94\/5b3\/478a945b3c062a741dac8f6a2cbb0ed5.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/478\/a94\/5b3\/478a945b3c062a741dac8f6a2cbb0ed5.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f SCT-013-015 \u043a NodeMCU<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0431\u0440\u0430\u043d\u043e, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0435\u0442\u0447 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u043f\u043e\u0440\u0442\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u043e\u0442\u043e \u0441 &#171;\u043f\u043e\u043b\u0435\u0432\u044b\u0445&#187; \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/802\/26d\/d94\/80226dd9457e9db2d241f71c802ecc0d.jpg\" alt=\"\u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 \u043f\u043e\u0440\u0442\u0430 - \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u0430\u044f \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439\" title=\"\u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 \u043f\u043e\u0440\u0442\u0430 - \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u0430\u044f \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439\" width=\"1201\" height=\"680\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/802\/26d\/d94\/80226dd9457e9db2d241f71c802ecc0d.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/802\/26d\/d94\/80226dd9457e9db2d241f71c802ecc0d.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 \u043f\u043e\u0440\u0442\u0430 &#8212; \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u0430\u044f \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/89c\/507\/920\/89c507920737fdc0515ebd161f164cc1.jpg\" alt=\"\u0421\u0432\u0430\u0440\u043e\u0447\u043d\u044b\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442 \u0442\u0430\u043a \u0436\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f &quot;\u043d\u0430 \u0443\u0440\u0430&quot; (\u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 ESP32)\" title=\"\u0421\u0432\u0430\u0440\u043e\u0447\u043d\u044b\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442 \u0442\u0430\u043a \u0436\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f &quot;\u043d\u0430 \u0443\u0440\u0430&quot; (\u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 ESP32)\" width=\"1199\" height=\"1184\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/89c\/507\/920\/89c507920737fdc0515ebd161f164cc1.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/89c\/507\/920\/89c507920737fdc0515ebd161f164cc1.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0432\u0430\u0440\u043e\u0447\u043d\u044b\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442 \u0442\u0430\u043a \u0436\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f &#171;\u043d\u0430 \u0443\u0440\u0430&#187; (\u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 ESP32)<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u0441\u0442\u044b \u0438\u0434\u0435\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u0441\u0440\u0435\u0434\u0435 Arduino IDE \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0436\u0438\u0437\u043d\u0435\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0443\u043c\u043a\u0438: \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0445\u043e\u043b\u043e\u0441\u0442\u043e\u0433\u043e \u0445\u043e\u0434\u0430 (\u043f\u0440\u043e\u0441\u0442\u043e\u044f) \u0441\u0442\u0430\u043d\u043a\u0430 \u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0440\u0435\u0437\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430. \u042d\u0442\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439.<\/p>\n<p><strong>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435: \u0441\u0442\u0430\u0440\u044b\u0439 \u0434\u043e\u0431\u0440\u044b\u0439 Excel <\/strong><\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u044b\u043b\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c low-code \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 n8n, \u0433\u0434\u0435 \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 workflow. \u041e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 .csv \u0444\u0430\u0439\u043b. <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fe7\/716\/3d0\/fe77163d04e90b6e005841928d32f3ad.JPG\" alt=\"\u041f\u043e\u0442\u043e\u043a \u0432 n8n: \u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 .csv\" title=\"\u041f\u043e\u0442\u043e\u043a \u0432 n8n: \u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 .csv\" width=\"1045\" height=\"313\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/fe7\/716\/3d0\/fe77163d04e90b6e005841928d32f3ad.JPG 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fe7\/716\/3d0\/fe77163d04e90b6e005841928d32f3ad.JPG 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u041f\u043e\u0442\u043e\u043a \u0432 n8n: \u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 .csv<\/em><\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4ff\/bd3\/30a\/4ffbd330aab8bf69e36414bec484d479.JPG\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u044b\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 Excel\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u044b\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 Excel\" width=\"620\" height=\"328\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4ff\/bd3\/30a\/4ffbd330aab8bf69e36414bec484d479.JPG 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4ff\/bd3\/30a\/4ffbd330aab8bf69e36414bec484d479.JPG 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u044b\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 Excel<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0448\u0442\u0440\u0438\u0445 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0438\u043b\u043e\u0442\u0430 \u2014 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0434\u043b\u044f ESP8266. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c: \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Wi-Fi (\u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 \u0432 \u0446\u0435\u0445\u0430\u0445 \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f), \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 n8n. <\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u043e\u0431\u044b\u0442\u0438\u0435 ONLINE:<\/strong> \u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0432 \u0441\u0435\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e \u0441\u0432\u043e\u0435\u043c      \u0437\u0430\u043f\u0443\u0441\u043a\u0435. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u0446\u0435\u0445\u0430 \u043d\u0430 \u043d\u043e\u0447\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u0435\u0441\u0442\u043e\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0438 \u0434\u043b\u044f      \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0432\u0430\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438      (\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u043c\u0435\u043d\u044b).<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0435\u0436\u0438\u043c \u0421\u0422\u041e\u041f:<\/strong> \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u0441\u0442\u0430\u043d\u043a\u0430 (\u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0435\u043d, \u043d\u043e \u043d\u0435 \u0440\u0435\u0436\u0435\u0442) \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043d\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0435\u0436\u0438\u043c \u0420\u0410\u0411\u041e\u0427\u0418\u0419 \u0425\u041e\u0414 (\u0420\u0425):<\/strong> \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u0442\u0447\u0438\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u043e\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445). \u041f\u0440\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 (\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0421\u0422\u041e\u041f) \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f:<\/strong> \u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 MAC-\u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0448\u0435\u043b \u0432 Excel, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u043b \u0441\u0432\u0435\u0436\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 .csv \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e: \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0438\u0441\u0442\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043f\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0441\u0442\u0430\u043d\u043a\u0430\u043c \u0438 \u0434\u0430\u0442\u0430\u043c, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438\u0445.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438\u0437 Excel (\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f)<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/244\/bf3\/31e\/244bf331ee6188acb9e00bf13695d165.JPG\" alt=\"&quot;\u0421\u044b\u0440\u0430\u044f&quot; \u0441\u0432\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 Excel \" title=\"&quot;\u0421\u044b\u0440\u0430\u044f&quot; \u0441\u0432\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 Excel \" width=\"1027\" height=\"593\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/244\/bf3\/31e\/244bf331ee6188acb9e00bf13695d165.JPG 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/244\/bf3\/31e\/244bf331ee6188acb9e00bf13695d165.JPG 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>&#171;\u0421\u044b\u0440\u0430\u044f&#187; \u0441\u0432\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 <em>Excel <\/em><\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/75d\/9ea\/824\/75d9ea8248a926e9149e6623562482b0.JPG\" alt=\"\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 Excel \" title=\"\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 Excel \" width=\"1173\" height=\"378\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/75d\/9ea\/824\/75d9ea8248a926e9149e6623562482b0.JPG 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/75d\/9ea\/824\/75d9ea8248a926e9149e6623562482b0.JPG 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 <em>Excel <\/em><\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u043c\u0435\u0441\u044f\u0446 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 (\u0431\u044b\u043b\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0434\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430) \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043b\u043e\u0433\u043e\u0432 \u043f\u0440\u0438\u0448\u043b\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u0430, \u0430, \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0430\u0441\u044c. \u0414\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u0435\u0435 &#8212; \u0442\u0438\u0440\u0430\u0436\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u0442\u0430\u043d\u043a\u043e\u0432 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.<\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u043d\u0430 \u043c\u0430\u043a\u0435\u0442\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0430\u0445 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u043d\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 DipTrace \u0431\u044b\u043b\u0430 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u043f\u0435\u0447\u0430\u0442\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0430\u043d\u043e \u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0447\u0435\u0440\u0435\u0437 \u0410\u043b\u0438\u044d\u043a\u0441\u043f\u0440\u0435\u0441\u0441 \u0438 \u0441\u043f\u0443\u0441\u0442\u044f \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 \u043d\u0430 \u041f\u043e\u0447\u0442\u0435 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043c\u044f\u0442\u043e\u0439. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/34d\/c96\/ca8\/34dc96ca899b012dc55e0877a4f0496d.JPG\" width=\"1170\" height=\"752\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/34d\/c96\/ca8\/34dc96ca899b012dc55e0877a4f0496d.JPG 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/34d\/c96\/ca8\/34dc96ca899b012dc55e0877a4f0496d.JPG 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u044b\/\u0438\u0437\u0434\u0435\u043b\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043b\u0430\u0442\u0430, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043c\u043e\u043d\u0442\u0430\u0436\u043d\u0443\u044e \u043a\u043e\u0440\u043e\u0431\u043a\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 100\u0445100\u044550\u043c\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0443\u044e \u0432 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430\u0445. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u0435\u0437 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 (\u0445\u043e\u0442\u044f \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0432\u043e\u0434\u0430 &#8212; GPIO4 \u0438 5) \u0438 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0432 \u043b\u0438\u0446\u0435 Hi-Link HLK-PM03. \u0412\u043c\u0435\u0441\u0442\u043e ESP-12 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ESP-07 \u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0430\u043d\u0442\u0435\u043d\u043d\u043e\u0439<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1cf\/f7f\/7d5\/1cff7f7d509f877a661b143c1136ce74.jpg\" alt=\"\u041f\u043b\u0430\u0442\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438\" title=\"\u041f\u043b\u0430\u0442\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438\" width=\"3024\" height=\"4032\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/1cf\/f7f\/7d5\/1cff7f7d509f877a661b143c1136ce74.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1cf\/f7f\/7d5\/1cff7f7d509f877a661b143c1136ce74.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043b\u0430\u0442\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/48b\/cb7\/d97\/48bcb7d97ea11f6479823d613d6613d4.jpg\" alt=\"\u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u0440\u043f\u0443\u0441\u0430\u0445\" title=\"\u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u0440\u043f\u0443\u0441\u0430\u0445\" width=\"4032\" height=\"3024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/48b\/cb7\/d97\/48bcb7d97ea11f6479823d613d6613d4.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/48b\/cb7\/d97\/48bcb7d97ea11f6479823d613d6613d4.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u0440\u043f\u0443\u0441\u0430\u0445<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043a\u0430 \u043f\u043b\u0430\u0442\u044b \u0431\u044b\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 &#8212; \u0432 \u043d\u0435\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u042d\u0442\u043e \u0434\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0440\u043e\u0433 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0442\u043e\u043a\u0443 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u043a\u0430 \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e, \u043c\u0435\u043d\u044f\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 n8n, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Wi-Fi \u0438 \u0435\u0449\u0435 \u0440\u044f\u0434 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043c\u0435\u043b\u043e\u0447\u0435\u0439. \u0421\u0430\u043c \u043a\u043e\u0434 \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u0441 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0418\u0418, \u0438, \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u0434\u0430\u043b\u0435\u043a \u043e\u0442 \u0438\u0434\u0435\u0430\u043b\u0430, \u043d\u043e \u0441 \u0432\u043e\u0437\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. <\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0438 \u0432\u044d\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u043a\u043e\u0434 \u0444\u0430\u0439\u043b\u0430 .ino)<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b: <\/p>\n<ul>\n<li>\n<p>\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u043f\u043e \u043f\u0430\u0440\u043e\u043b\u044e<\/p>\n<\/li>\n<li>\n<p>\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443 (OTA)<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u044d\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u0438 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0435 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435)<\/p>\n<\/li>\n<li>\n<p>\u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a wifi (\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e\/\u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e)<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u044d\u0431\u0445\u0443\u043a<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a wifi<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7b5\/2f9\/0b1\/7b52f90b1ef96002960334d29d231c64.jpg\" alt=\"\u0412\u044d\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\" title=\"\u0412\u044d\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\" width=\"653\" height=\"475\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7b5\/2f9\/0b1\/7b52f90b1ef96002960334d29d231c64.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7b5\/2f9\/0b1\/7b52f90b1ef96002960334d29d231c64.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u044d\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0422.\u043a. \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u043e \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0441 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u041a\u043e\u0434 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c &#171;\u043a\u0430\u043a \u0435\u0441\u0442\u044c&#187; \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<pre><code>#include &lt;ESP8266WiFi.h&gt;#include &lt;ESP8266WebServer.h&gt;#include &lt;ESP8266HTTPClient.h&gt;#include &lt;ESP8266HTTPUpdateServer.h&gt; #include &lt;WiFiClient.h&gt;#include &lt;FS.h&gt;#include &lt;LittleFS.h&gt;#include \"EmonLib.h\"\/\/ =========================================================================\/\/ \u0411\u041b\u041e\u041a \u0426\u0415\u041d\u0422\u0420\u0410\u041b\u042c\u041d\u042b\u0425 \u041d\u0410\u0421\u0422\u0420\u041e\u0415\u041a (\u0417\u0414\u0415\u0421\u042c \u041c\u0415\u041d\u042f\u0422\u042c \u0414\u0410\u041d\u041d\u042b\u0415 \u041f\u041e \u0423\u041c\u041e\u041b\u0427\u0410\u041d\u0418\u042e)\/\/ =========================================================================const char* WIFI_SSID_DEFAULT   = \"YOU_WIFI\";          const char* WIFI_PASS_DEFAULT   = \"password_wifi\";    const char* ADMIN_PASS_DEFAULT  = \"admin\";           const char* N8N_WEBHOOK_DEFAULT = \"http:\/\/192.168.11.11:5678\/webhook\/device-monitor\"; \/\/ =========================================================================\/\/ \u0421\u0422\u0420\u0423\u041a\u0422\u0423\u0420\u0410 \u041d\u0410\u0421\u0422\u0420\u041e\u0415\u041a (\u0425\u0420\u0410\u041d\u0418\u0422\u0421\u042f \u0412 LITTLEFS)\/\/ =========================================================================struct WebConfig {  char wifi_ssid[32];  char wifi_pass[64];  char admin_pass[32];  char n8n_webhook[128];  float currentThreshold;  bool ledDisabled;     \/\/ \u041f\u043e\u043b\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438  char company_name[64];  char header_desc[64];  char device_type[32];  char inv_number[32];     char header_color[16];     char menu_color[16];       char bg_color[16];       };WebConfig myConfig;\/\/ --- \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0418 \u0416\u0415\u041b\u0415\u0417\u0410 ESP-12F \u0418 \u041a\u0410\u041b\u0418\u0411\u0420\u041e\u0412\u041a\u0418 ---const int sensorPin = A0;const int ledBlue   = LED_BUILTIN; const int ledGreen  = 12;          const int ledRed    = 13;          EnergyMonitor emon1;float calibrationK = 15.0;    float noiseOffset = 1.18;    float voltage = 230.0;       \/\/ --- \u041f\u041e\u0420\u041e\u0413\u0418 \u0418 \u0422\u0410\u0419\u041c\u0418\u041d\u0413\u0418 ---float PX_threshold = 4.0;     const unsigned long DEBOUNCE_TIME = 2000;       const unsigned long WIFI_BLINK_INTERVAL = 300;  \/\/ --- \u041f\u0415\u0420\u0415\u041c\u0415\u041d\u041d\u042b\u0415 \u041b\u041e\u0413\u0418\u041a\u0418 ---String deviceName = \"\";enum State { STOP, PX };State currentFlag = STOP;State targetState = STOP;unsigned long pxStartTime = 0;unsigned long stateChangeTimer = 0;unsigned long lastMeasurementTime = 0; bool onlineSent = false;bool wifiWasConnected = false;const char* BUFFER_FILE = \"\/offline_buffer.dat\";const char* TEMP_FILE = \"\/tmp_buffer.dat\";const char* WEB_CONFIG_FILE = \"\/web_config.bin\";ESP8266WebServer server(80);ESP8266HTTPUpdateServer httpUpdater; WiFiClient wifiClient; float currentRMS = 0.0; struct LogEntry {    int markerType;     unsigned long duration;};\/\/ --- \u0414\u0415\u041a\u041b\u0410\u0420\u0410\u0426\u0418\u042f \u041f\u0420\u041e\u0422\u041e\u0422\u0418\u041f\u041e\u0412 \u0424\u0423\u041d\u041a\u0426\u0418\u0419 ---void saveEventToBuffer(int markerType, unsigned long duration);bool sendWebhook(int markerType, unsigned long duration);void processOfflineBuffer();void handleLogin(const String&amp; targetUrl, const String&amp; activePage);String getHeaderHTML(const String&amp; pageTitle, const String&amp; activePage, bool autoRefresh);String getFooterHTML();void applyWebConfig();void loadWebConfig();void saveWebConfig();void initStorage();void handleWifiDisconnectBlink();\/\/ =========================================================================\/\/ \u0424\u0423\u041d\u041a\u0426\u0418\u0418 \u0420\u0410\u0411\u041e\u0422\u042b \u0421 \u0421\u0418\u0421\u0422\u0415\u041c\u041e\u0419 \u0425\u0420\u0410\u041d\u0415\u041d\u0418\u042f\/\/ =========================================================================void applyWebConfig() {    PX_threshold = myConfig.currentThreshold;}void loadWebConfig() {    if (LittleFS.exists(WEB_CONFIG_FILE)) {        File f = LittleFS.open(WEB_CONFIG_FILE, \"r\");        if (f) {            size_t bytesRead = f.read((uint8_t*)&amp;myConfig, sizeof(WebConfig));            f.close();            if (bytesRead == sizeof(WebConfig)) {                applyWebConfig();                return;            }        }    }        memset(&amp;myConfig, 0, sizeof(WebConfig));    strncpy(myConfig.wifi_ssid, WIFI_SSID_DEFAULT, sizeof(myConfig.wifi_ssid) - 1);    strncpy(myConfig.wifi_pass, WIFI_PASS_DEFAULT, sizeof(myConfig.wifi_pass) - 1);    strncpy(myConfig.admin_pass, ADMIN_PASS_DEFAULT, sizeof(myConfig.admin_pass) - 1);    strncpy(myConfig.n8n_webhook, N8N_WEBHOOK_DEFAULT, sizeof(myConfig.n8n_webhook) - 1);    myConfig.currentThreshold = 4.0;    myConfig.ledDisabled = false;         strncpy(myConfig.company_name, \"IIoT\", sizeof(myConfig.company_name) - 1);    strncpy(myConfig.header_desc, \"\u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\", sizeof(myConfig.header_desc) - 1);    strncpy(myConfig.device_type, \"\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435\", sizeof(myConfig.device_type) - 1);     strncpy(myConfig.inv_number, \"\u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\", sizeof(myConfig.inv_number) - 1);         strncpy(myConfig.header_color, \"#ed1c24\", sizeof(myConfig.header_color) - 1);     strncpy(myConfig.menu_color, \"#000000\", sizeof(myConfig.menu_color) - 1);       strncpy(myConfig.bg_color, \"#ffffff\", sizeof(myConfig.bg_color) - 1);               saveWebConfig();}void saveWebConfig() {    File f = LittleFS.open(WEB_CONFIG_FILE, \"w\");    if (f) {        f.write((uint8_t*)&amp;myConfig, sizeof(WebConfig));        f.close();        applyWebConfig();    }}void initStorage() {    if (!LittleFS.begin()) {        LittleFS.format();        LittleFS.begin();    }    loadWebConfig();}bool isAuthenticated() {    if (!server.hasHeader(\"Cookie\")) return false;    String cookie = server.header(\"Cookie\");    String targetAuth = \"auth=\" + String(myConfig.admin_pass);    int index = cookie.indexOf(targetAuth);    if (index == -1) return false;    char nextChar = cookie.charAt(index + targetAuth.length());    if (nextChar == '\\0' || nextChar == ';' || nextChar == ' ') return true;    return false;}\/\/ =========================================================================\/\/ \u041f\u0415\u0420\u0415\u0420\u0410\u0411\u041e\u0422\u0410\u041d\u041d\u042b\u0419 \u0412\u0415\u0411-\u0418\u041d\u0422\u0415\u0420\u0424\u0415\u0419\u0421 \u2014 \u0414\u0412\u0423\u0425\u0421\u0422\u0420\u041e\u0427\u041d\u041e\u0415 \u041c\u0415\u041d\u042e \u0418 \u0421\u0422\u0418\u041b\u0418\/\/ =========================================================================String getHeaderHTML(const String&amp; pageTitle, const String&amp; activePage, bool autoRefresh) {  String html;  html.reserve(4200);   html += F(\"&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;meta charset='UTF-8'&gt;&lt;meta name='viewport' content='width=device-width, initial-scale=1.0'&gt;\");  if (autoRefresh) html += F(\"&lt;meta http-equiv='refresh' content='5'&gt;\"); \/\/ \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043e 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u043e\u0442\u0438\u0432 \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u0439  html += F(\"&lt;title&gt;\"); html += pageTitle; html += F(\"&lt;\/title&gt;&lt;style&gt;\");  html += F(\"html,body{height:100%;margin:0;}body{font-family:Verdana,sans-serif;font-size:12px;color:#000;background-color:\");  html += String(myConfig.bg_color);   html += F(\";display:flex;flex-direction:column;}\");  html += F(\".header{background-color:\"); html += String(myConfig.header_color); html += F(\";color:#fff;padding:15px;text-align:left;}\");  html += F(\".header-title{font-size:18px;font-weight:bold;margin:0 0 5px 0;}.header-subnet{font-size:12px;margin:0 0 5px 0;}.header-desc{font-size:12px;margin:0;}\");    \/\/ \u0421\u0442\u0438\u043b\u0438 \u0434\u043b\u044f \u0434\u0432\u0443\u0445\u0441\u0442\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e  html += F(\".menu-container{background-color:\"); html += String(myConfig.menu_color); html += F(\";width:100%;display:block;}\");  html += F(\".menu-row{width:100%;clear:both;overflow:hidden;box-sizing:border-box;}\");  html += F(\".menu-row.top-row{border-bottom:1px solid #444;}\");  html += F(\".menu-row a{display:block;padding:10px 14px;text-decoration:none;font-size:13px;}\");  html += F(\".menu-row a:hover{background-color:#555;color:#fff;}\");    \/\/ \u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430: \u0432\u043b\u0435\u0432\u043e, \u0431\u0435\u043b\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438  html += F(\".top-row a{float:left;color:#fff;font-weight:normal;}\");  html += F(\".top-row a.active{font-weight:bold;text-decoration:underline;}\");    \/\/ \u041d\u0438\u0436\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430: \u0432\u043f\u0440\u0430\u0432\u043e, \u0441\u0435\u0440\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438  html += F(\".bottom-row a{float:right;color:#888;font-weight:normal;}\");  html += F(\".bottom-row a.active{color:#fff;font-weight:bold;text-decoration:underline;}\");    html += F(\".container{padding:20px;flex:1;}.page-title{font-size:14px;font-weight:bold;margin-bottom:15px;}\");  html += F(\"input[type=text],input[type=password],input[type=number],select{font-family:Verdana;font-size:12px;padding:5px;width:250px;margin-bottom:10px;display:block;}\");  html += F(\"input[type=submit]{font-family:Verdana;font-size:12px;padding:6px 15px;background-color:#333;color:#fff;border:none;cursor:pointer;}input[type=submit]:hover{background-color:#555;}.error-msg{color:red;font-weight:bold;margin-bottom:10px;}\");  html += F(\".footer{text-align:right;padding:20px;background-color:transparent;color:#000;font-size:12px;}.footer a{color:#0066cc;text-decoration:underline;}&lt;\/style&gt;&lt;\/head&gt;&lt;body&gt;\");    \/\/ \u0412\u044b\u0432\u043e\u0434 \u0448\u0430\u043f\u043a\u0438 \u0441 5 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438  String currentConnectedNet = (WiFi.status() == WL_CONNECTED) ? WiFi.SSID() : F(\"Connecting...\");  html += F(\"&lt;div class='header'&gt;&lt;p class='header-title'&gt;\"); html += String(myConfig.company_name);  html += F(\"&lt;\/p&gt;&lt;p class='header-subnet'&gt;\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a Wi-Fi: \"); html += currentConnectedNet;    if (strlen(myConfig.device_type) &gt; 0) {      html += F(\"&lt;\/p&gt;&lt;p class='header-subnet'&gt;\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430: \"); html += String(myConfig.device_type);  }    html += F(\"&lt;\/p&gt;&lt;p class='header-subnet'&gt;\u0418\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440: \"); html += String(myConfig.inv_number);  html += F(\"&lt;\/p&gt;&lt;p class='header-desc'&gt;\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440: \"); html += String(myConfig.header_desc);  html += F(\"&lt;\/p&gt;&lt;\/div&gt;\");    \/\/ \u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0434\u0432\u0443\u0445\u0441\u0442\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e  html += F(\"&lt;div class='menu-container'&gt;\");    \/\/ \u0421\u0442\u0440\u043e\u043a\u0430 1: \u041e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f (\u0412\u043b\u0435\u0432\u043e, \u0411\u0435\u043b\u044b\u0439 \u0442\u0435\u043a\u0441\u0442)  html += F(\"&lt;div class='menu-row top-row'&gt;\");  html += F(\"&lt;a href='\/'\"); html += (activePage == \"root\" ? F(\" class='active'\") : F(\"\")); html += F(\"&gt;\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435&lt;\/a&gt;\");  html += F(\"&lt;a href='\/sensor'\"); html += (activePage == \"sensor\" ? F(\" class='active'\") : F(\"\")); html += F(\"&gt;\u0414\u0430\u0442\u0447\u0438\u043a&lt;\/a&gt;\");  html += F(\"&lt;a href='\/n8n'\"); html += (activePage == \"n8n\" ? F(\" class='active'\") : F(\"\")); html += F(\"&gt;\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f N8N&lt;\/a&gt;&lt;\/div&gt;\");    \/\/ \u0421\u0442\u0440\u043e\u043a\u0430 2: \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f (\u0412\u043f\u0440\u0430\u0432\u043e, \u0421\u0435\u0440\u044b\u0439 \u0442\u0435\u043a\u0441\u0442)  html += F(\"&lt;div class='menu-row bottom-row'&gt;\");  html += F(\"&lt;a href='\/update'\"); html += (activePage == \"update\" ? F(\" class='active'\") : F(\"\")); html += F(\"&gt;\u041c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430&lt;\/a&gt;\");  html += F(\"&lt;a href='\/access'\"); html += (activePage == \"access\" ? F(\" class='active'\") : F(\"\")); html += F(\"&gt;\u0414\u043e\u0441\u0442\u0443\u043f&lt;\/a&gt;\");  html += F(\"&lt;a href='\/style'\"); html += (activePage == \"style\" ? F(\" class='active'\") : F(\"\")); html += F(\"&gt;\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435&lt;\/a&gt;&lt;\/div&gt;&lt;\/div&gt;\");    html += F(\"&lt;div class='container'&gt;\");  return html;}String getFooterHTML() {  String html; html.reserve(200);  html += F(\"&lt;\/div&gt;&lt;div class='footer'&gt;2026 \u0433.&lt;\/div&gt;&lt;\/body&gt;&lt;\/html&gt;\");  return html;}void handleLogin(const String&amp; targetUrl, const String&amp; activePage) {  if (isAuthenticated()) { server.sendHeader(\"Location\", targetUrl); server.send(303); return; }  if (server.hasArg(\"password\") &amp;&amp; server.arg(\"password\") == String(myConfig.admin_pass)) {      server.sendHeader(\"Set-Cookie\", \"auth=\" + String(myConfig.admin_pass) + \"; Path=\/; HttpOnly\");      server.sendHeader(\"Location\", targetUrl); server.send(303); return;  }  String html = getHeaderHTML(\"\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f\", activePage, false); html.reserve(800);  html += F(\"&lt;div class='page-title'&gt;\u0414\u043e\u0441\u0442\u0443\u043f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d. \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430:&lt;\/div&gt;\");  if (server.hasArg(\"password\")) html += F(\"&lt;p class='error-msg'&gt;\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c!&lt;\/p&gt;\");  html += F(\"&lt;form method='POST' action='\"); html += targetUrl;  html += F(\"'&gt;\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430: &lt;input type='password' name='password'&gt;&lt;input type='submit' value='\u0412\u043e\u0439\u0442\u0438'&gt;&lt;\/form&gt;\");  html += getFooterHTML(); server.send(200, \"text\/html\", html);}\/\/ =========================================================================\/\/ \u0421\u0422\u0420\u0410\u041d\u0418\u0426\u042b \u0418\u041d\u0422\u0415\u0420\u0424\u0415\u0419\u0421\u0410 \u0418 \u041d\u0410\u0421\u0422\u0420\u041e\u0415\u041a (\u0412\u0415\u0420\u0425\u041d\u042f\u042f \u0418 \u041d\u0418\u0416\u041d\u042f\u042f \u0421\u0422\u0420\u041e\u041a\u0418 \u041c\u0415\u041d\u042e)\/\/ =========================================================================void handleRoot() {  if (server.hasArg(\"update_led\")) {    myConfig.ledDisabled = server.hasArg(\"led_state\");    saveWebConfig(); server.sendHeader(\"Location\", \"\/\"); server.send(303); return;  }  String html = getHeaderHTML(\"\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\", \"root\", true); html.reserve(1200);  html += F(\"&lt;div class='page-title'&gt;\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b&lt;\/div&gt;&lt;p&gt;\u2022 \u0418\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (MAC): &lt;b&gt;\"); html += WiFi.macAddress();  html += F(\"&lt;\/b&gt;&lt;\/p&gt;&lt;p&gt;\u2022 \u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 (IP): &lt;b&gt;\"); html += WiFi.localIP().toString();  html += F(\"&lt;\/b&gt;&lt;\/p&gt;&lt;p&gt;\u2022 \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430: &lt;b&gt;\"); html += String(currentRMS, 2);  html += F(\" \u0410&lt;\/b&gt;&lt;\/p&gt;&lt;p&gt;\u2022 \u041f\u043e\u0440\u043e\u0433 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f: &lt;b&gt;\"); html += String(myConfig.currentThreshold, 2);  html += F(\" \u0410&lt;\/b&gt;&lt;\/p&gt;&lt;br&gt;&lt;form method='POST' action='\/'&gt;&lt;input type='hidden' name='update_led' value='1'&gt;&lt;label style='font-family:Verdana;font-size:12px;'&gt;\");  html += F(\"&lt;input type='checkbox' name='led_state' value='1'\"); html += (myConfig.ledDisabled ? F(\" checked\") : F(\"\"));  html += F(\" onchange='this.form.submit()'&gt; \u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b &lt;\/label&gt;&lt;\/form&gt;\");  html += getFooterHTML(); server.send(200, \"text\/html\", html);}void handleSensor() {  if (!isAuthenticated()) { handleLogin(\"\/sensor\", \"sensor\"); return; }  if (server.hasArg(\"threshold\")) { myConfig.currentThreshold = server.arg(\"threshold\").toFloat(); saveWebConfig(); }  String html = getHeaderHTML(\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430\", \"sensor\", false); html.reserve(1000);  html += F(\"&lt;div class='page-title'&gt;\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0430\u0442\u0447\u0438\u043a\u0430&lt;\/div&gt;&lt;p&gt;\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430: &lt;b&gt;\"); html += String(currentRMS, 2);  html += F(\" \u0410&lt;\/b&gt;&lt;\/p&gt;&lt;form method='POST' action='\/sensor'&gt;\u041f\u043e\u0440\u043e\u0433 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f: &lt;input type='number' step='0.01' name='threshold' value='\");  html += String(myConfig.currentThreshold, 2); html += F(\"'&gt;&lt;input type='submit' value='\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c'&gt;&lt;\/form&gt;\");  html += getFooterHTML(); server.send(200, \"text\/html\", html);}void handleN8N() {  if (!isAuthenticated()) { handleLogin(\"\/n8n\", \"n8n\"); return; }  if (server.hasArg(\"webhook\")) { server.arg(\"webhook\").toCharArray(myConfig.n8n_webhook, sizeof(myConfig.n8n_webhook)); saveWebConfig(); }  String html = getHeaderHTML(\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 N8N\", \"n8n\", false); html.reserve(1000);  html += F(\"&lt;div class='page-title'&gt;\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f N8N&lt;\/div&gt;&lt;form method='POST' action='\/n8n'&gt;\u0410\u0434\u0440\u0435\u0441 web-hook: &lt;input type='text' name='webhook' value='\");  html += String(myConfig.n8n_webhook); html += F(\"' style='width:400px;'&gt;&lt;input type='submit' value='\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c'&gt;&lt;\/form&gt;\");  html += getFooterHTML(); server.send(200, \"text\/html\", html);}void handleStyle() {  if (!isAuthenticated()) { handleLogin(\"\/style\", \"style\"); return; }    if (server.hasArg(\"c_name\") &amp;&amp; server.hasArg(\"h_desc\") &amp;&amp; server.hasArg(\"d_type\") &amp;&amp; server.hasArg(\"i_num\") &amp;&amp;      server.hasArg(\"h_col\") &amp;&amp; server.hasArg(\"m_col\") &amp;&amp; server.hasArg(\"bg_col\")) {    server.arg(\"c_name\").toCharArray(myConfig.company_name, sizeof(myConfig.company_name));    server.arg(\"h_desc\").toCharArray(myConfig.header_desc, sizeof(myConfig.header_desc));    server.arg(\"d_type\").toCharArray(myConfig.device_type, sizeof(myConfig.device_type));    server.arg(\"i_num\").toCharArray(myConfig.inv_number, sizeof(myConfig.inv_number));    server.arg(\"h_col\").toCharArray(myConfig.header_color, sizeof(myConfig.header_color));    server.arg(\"m_col\").toCharArray(myConfig.menu_color, sizeof(myConfig.menu_color));    server.arg(\"bg_col\").toCharArray(myConfig.bg_color, sizeof(myConfig.bg_color));    saveWebConfig();  }    String html = getHeaderHTML(\"\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435\", \"style\", false); html.reserve(2800);  html += F(\"&lt;div class='page-title'&gt;\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f&lt;\/div&gt;&lt;form method='POST' action='\/style'&gt;\");    html += F(\"\u0418\u043c\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 (64 \u0441\u0438\u043c\u0432\u043e\u043b\u0430): &lt;input type='text' name='c_name' maxlength='63' value='\"); html += String(myConfig.company_name);    html += F(\"'&gt;\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430: &lt;select name='d_type'&gt;\");  html += F(\"&lt;option value='\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435'\"); html += (String(myConfig.device_type) == F(\"\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435\") ? F(\" selected\") : F(\"\")); html += F(\"&gt;\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435&lt;\/option&gt;\");  html += F(\"&lt;option value='\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435'\"); html += (String(myConfig.device_type) == F(\"\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435\") ? F(\" selected\") : F(\"\")); html += F(\"&gt;\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435&lt;\/option&gt;\");  html += F(\"&lt;option value=''\"); html += (strlen(myConfig.device_type) == 0 ? F(\" selected\") : F(\"\")); html += F(\"&gt;\u041f\u0443\u0441\u0442\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435&lt;\/option&gt;&lt;\/select&gt;\");    html += F(\"\u0418\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 (32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430): &lt;input type='text' name='i_num' maxlength='31' value='\"); html += String(myConfig.inv_number);    html += F(\"'&gt;\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (64 \u0441\u0438\u043c\u0432\u043e\u043b\u0430): &lt;input type='text' name='h_desc' maxlength='63' value='\"); html += String(myConfig.header_desc);    html += F(\"'&gt;\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430: &lt;input type='color' name='h_col' value='\"); html += String(myConfig.header_color);  html += F(\"' style='width:60px; height:30px; margin-bottom:10px; display:block;'&gt;\");    html += F(\"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u0441\u0442\u0440\u043e\u043a \u043c\u0435\u043d\u044e: &lt;input type='color' name='m_col' value='\"); html += String(myConfig.menu_color);  html += F(\"' style='width:60px; height:30px; margin-bottom:10px; display:block;'&gt;\");    html += F(\"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b: &lt;input type='color' name='bg_col' value='\"); html += String(myConfig.bg_color);  html += F(\"' style='width:60px; height:30px; margin-bottom:15px; display:block;'&gt;\");    html += F(\"&lt;input type='submit' value='\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f'&gt;&lt;\/form&gt;\");  html += getFooterHTML(); server.send(200, \"text\/html\", html);}\/\/ =========================================================================\/\/ \u0421\u0422\u0420\u0410\u041d\u0418\u0426\u042b \u0410\u0414\u041c\u0418\u041d\u0418\u0421\u0422\u0420\u0418\u0420\u041e\u0412\u0410\u041d\u0418\u042f \u0418 \u041c\u0418\u041a\u0420\u041e\u041f\u0420\u041e\u0413\u0420\u0410\u041c\u041c\u042b \u2014 \u041a\u041e\u041d\u0415\u0426 \u0412\u0415\u0411-\u0421\u0415\u0420\u0412\u0415\u0420\u0410\/\/ =========================================================================void handleAccess() {  if (!isAuthenticated()) { handleLogin(\"\/access\", \"access\"); return; }  if (server.hasArg(\"reboot\")) {    server.sendHeader(\"Refresh\", \"10; url=\/\");     String html = getHeaderHTML(\"\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430\", \"access\", false);    html += F(\"&lt;div class='page-title'&gt;\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430...&lt;\/div&gt;&lt;p&gt;\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f...&lt;\/p&gt;\");    html += getFooterHTML(); server.send(200, \"text\/html\", html);    delay(1000); ESP.restart(); return;  }    if (server.hasArg(\"ssid\") &amp;&amp; server.hasArg(\"pass\")) {    server.arg(\"ssid\").toCharArray(myConfig.wifi_ssid, sizeof(myConfig.wifi_ssid));    server.arg(\"pass\").toCharArray(myConfig.wifi_pass, sizeof(myConfig.wifi_pass));    saveWebConfig();    String html = getHeaderHTML(\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b\", \"access\", false);    html += F(\"&lt;div class='page-title'&gt;\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b!&lt;\/div&gt;&lt;p&gt;\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f...&lt;\/p&gt;\");    html += getFooterHTML(); server.send(200, \"text\/html\", html);    delay(1000); ESP.restart(); return;  }    if (server.hasArg(\"admin_p\")) { server.arg(\"admin_p\").toCharArray(myConfig.admin_pass, sizeof(myConfig.admin_pass)); saveWebConfig(); }    String html = getHeaderHTML(\"\u0414\u043e\u0441\u0442\u0443\u043f\", \"access\", false); html.reserve(1600);  html += F(\"&lt;div class='page-title'&gt;\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0435\u0442\u044c&lt;\/div&gt;&lt;form method='POST' action='\/access'&gt;\");  html += F(\"\u0418\u043c\u044f \u0441\u0435\u0442\u0438 Wi-Fi (SSID): &lt;input type='text' name='ssid' value='\"); html += String(myConfig.wifi_ssid);  html += F(\"'&gt;\u041f\u0430\u0440\u043e\u043b\u044c Wi-Fi: &lt;input type='password' name='pass' value='\"); html += String(myConfig.wifi_pass);  html += F(\"'&gt;&lt;br&gt;\u041f\u0430\u0440\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430: &lt;input type='password' name='admin_p' value='\"); html += String(myConfig.admin_pass);  html += F(\"'&gt;&lt;input type='submit' value='\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b'&gt;&lt;\/form&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;form method='POST' action='\/access'&gt;&lt;input type='hidden' name='reboot' value='true'&gt;\");  html += F(\"&lt;input type='submit' value='\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e' style='background-color:#ed1c24;'&gt;&lt;\/form&gt;\");  html += getFooterHTML(); server.send(200, \"text\/html\", html);}void handleUpdatePage() {  if (!isAuthenticated()) { handleLogin(\"\/update\", \"update\"); return; }    String html = getHeaderHTML(\"\u041c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\", \"update\", false); html.reserve(1200);  html += F(\"&lt;div class='page-title'&gt;\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443 (OTA)&lt;\/div&gt;\");  html += F(\"&lt;p&gt;\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b &lt;b&gt;(.bin)&lt;\/b&gt; \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 ESP-12F:&lt;\/p&gt;&lt;br&gt;\");    html += F(\"&lt;form method='POST' action='\/do_update' enctype='multipart\/form-data' style='background:#f4f4f4; padding:20px; border:1px solid #ccc; width:350px;'&gt;\");  html += F(\"  &lt;input type='file' name='update' style='margin-bottom:15px; display:block;'&gt;\");  html += F(\"  &lt;input type='submit' value='\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c' style='background-color:#ed1c24; color:white;'&gt;\");  html += F(\"&lt;\/form&gt;\");    html += getFooterHTML();  server.send(200, \"text\/html\", html);}\/\/ =========================================================================\/\/ \u041b\u041e\u0413\u0418\u041a\u0410 \u0411\u0423\u0424\u0415\u0420\u0410, \u0421\u0415\u0422\u0418, \u0417\u0410\u041c\u0415\u0420\u041e\u0412 \u0418 \u0418\u041d\u0414\u0418\u041a\u0410\u0426\u0418\u0418\/\/ =========================================================================void saveEventToBuffer(int markerType, unsigned long duration) {    File f = LittleFS.open(BUFFER_FILE, \"a\");    if (!f) return;    LogEntry entry;    entry.markerType = markerType;    entry.duration = duration;    f.write((uint8_t*)&amp;entry, sizeof(LogEntry));    f.close();}bool sendWebhook(int markerType, unsigned long duration) {    if (WiFi.status() != WL_CONNECTED) return false;    HTTPClient http;    http.setTimeout(3000);    if (http.begin(wifiClient, myConfig.n8n_webhook)) {        http.addHeader(F(\"Content-Type\"), F(\"application\/json\"));                \/\/ \u0427\u0435\u0442\u043a\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u043e\u0432: PX (1) \u0438 ONLINE (3)        String modeStr;        unsigned long currentDuration = duration;                if (markerType == 1) {            modeStr = F(\"PX\");              \/\/ \u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0445\u043e\u0434\u0430        } else if (markerType == 3) {            modeStr = F(\"ONLINE\");          \/\/ \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u0448\u043b\u043e \u043d\u0430 \u0441\u0432\u044f\u0437\u044c            currentDuration = 0;        } else {            modeStr = F(\"STOP\");            \/\/ \u0417\u0430\u0449\u0438\u0442\u043d\u044b\u0439 \u0444\u043b\u0430\u0433 \u0434\u043b\u044f \u0431\u0443\u0444\u0435\u0440\u0430            currentDuration = 0;        }                \/\/ \u0421\u0431\u043e\u0440\u043a\u0430 JSON \u0441\u0442\u0440\u043e\u0433\u043e \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043f\u043e \u0422\u0417        String jsonPayload; jsonPayload.reserve(300);        jsonPayload += F(\"{\\\"mac_address\\\":\\\"\");   jsonPayload += WiFi.macAddress();        jsonPayload += F(\"\\\",\\\"device_type\\\":\\\"\");  jsonPayload += String(myConfig.device_type);         jsonPayload += F(\"\\\",\\\"inv_number\\\":\\\"\");   jsonPayload += String(myConfig.inv_number);         jsonPayload += F(\"\\\",\\\"identifier\\\":\\\"\");   jsonPayload += String(myConfig.header_desc);         jsonPayload += F(\"\\\",\\\"mode\\\":\\\"\");         jsonPayload += modeStr;         jsonPayload += F(\"\\\",\\\"duration\\\":\");       jsonPayload += String(currentDuration);        jsonPayload += F(\"}\");                int httpResponseCode = http.POST(jsonPayload);        http.end();        return (httpResponseCode &gt;= 200 &amp;&amp; httpResponseCode &lt; 300);    }    return false;}void processOfflineBuffer() {    if (!LittleFS.exists(BUFFER_FILE)) return;    File f = LittleFS.open(BUFFER_FILE, \"r\");    if (!f) return;    if (f.size() \/ sizeof(LogEntry) == 0) { f.close(); LittleFS.remove(BUFFER_FILE); return; }        bool allSent = true;    size_t lastSuccessfulPosition = 0;    while (f.available() &gt;= sizeof(LogEntry)) {        LogEntry entry;        f.read((uint8_t*)&amp;entry, sizeof(LogEntry));        if (sendWebhook(entry.markerType, entry.duration)) {            lastSuccessfulPosition = f.position();            ESP.wdtFeed();            delay(10);        } else { allSent = false; break; }    }    f.close();    if (allSent) {        LittleFS.remove(BUFFER_FILE);    } else if (lastSuccessfulPosition &gt; 0) {        File fSrc = LittleFS.open(BUFFER_FILE, \"r\");        File fTmp = LittleFS.open(TEMP_FILE, \"w\");        if (fSrc &amp;&amp; fTmp) {            fSrc.seek(lastSuccessfulPosition, SeekSet);            while (fSrc.available() &gt;= sizeof(LogEntry)) {                LogEntry entry; fSrc.read((uint8_t*)&amp;entry, sizeof(LogEntry));                fTmp.write((uint8_t*)&amp;entry, sizeof(LogEntry));            }        }        if (fSrc) fSrc.close(); if (fTmp) fTmp.close();        LittleFS.remove(BUFFER_FILE); LittleFS.rename(TEMP_FILE, BUFFER_FILE);    }}void handleWifiDisconnectBlink() {    static unsigned long lastWifiBlink = 0;    static bool toggleState = false;    unsigned long currentMillis = millis();        digitalWrite(ledBlue, HIGH);    digitalWrite(ledGreen, HIGH);    if (currentMillis - lastWifiBlink &gt;= WIFI_BLINK_INTERVAL) {        lastWifiBlink = currentMillis;        toggleState = !toggleState;        digitalWrite(ledRed, toggleState ? LOW : HIGH);     }}void setup() {    Serial.begin(115200);    delay(2500);     Serial.println();    Serial.println(F(\"====================================\"));    Serial.println(F(\"[SYSTEM] \u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430...\"));    Serial.println(F(\"====================================\"));        pinMode(ledBlue, OUTPUT);    pinMode(ledGreen, OUTPUT);    pinMode(ledRed, OUTPUT);        digitalWrite(ledBlue, HIGH);    digitalWrite(ledGreen, HIGH);    digitalWrite(ledRed, HIGH);        initStorage();    emon1.current(sensorPin, calibrationK);         WiFi.mode(WIFI_STA);    deviceName = \"ESP12F_\" + WiFi.macAddress();    deviceName.replace(\":\", \"\");         WiFi.begin(myConfig.wifi_ssid, myConfig.wifi_pass);        server.collectHeaders(\"Cookie\");         server.on(\"\/\", HTTP_GET, handleRoot); server.on(\"\/\", HTTP_POST, handleRoot);     server.on(\"\/sensor\", HTTP_GET, handleSensor); server.on(\"\/sensor\", HTTP_POST, handleSensor);    server.on(\"\/n8n\", HTTP_GET, handleN8N); server.on(\"\/n8n\", HTTP_POST, handleN8N);    server.on(\"\/style\", HTTP_GET, handleStyle); server.on(\"\/style\", HTTP_POST, handleStyle);     server.on(\"\/access\", HTTP_GET, handleAccess); server.on(\"\/access\", HTTP_POST, handleAccess);    server.on(\"\/update\", HTTP_GET, handleUpdatePage);        httpUpdater.setup(&amp;server, \"\/do_update\");        server.begin();        \/\/ \u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0442\u0430\u043d\u043a\u0430 \u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f    double startIrms = emon1.calcIrms(740);    if (startIrms &gt;= PX_threshold) {        currentFlag = PX;        pxStartTime = millis();    } else {        currentFlag = STOP;    }        ESP.wdtEnable(2000); }void loop() {    ESP.wdtFeed();     server.handleClient();     unsigned long currentMillis = millis();    bool isConnected = (WiFi.status() == WL_CONNECTED);        if (!isConnected) {        handleWifiDisconnectBlink();         wifiWasConnected = false;        onlineSent = false;     } else {        digitalWrite(ledRed, HIGH);         if (!wifiWasConnected) {            Serial.print(F(\"[WIFI] Connected. IP: \")); Serial.print(WiFi.localIP());            Serial.printf(\" | Pass: %s\\n\", myConfig.admin_pass);            wifiWasConnected = true;        }        if (!onlineSent) {            if (sendWebhook(3, 0)) { \/\/ 3 = ONLINE                onlineSent = true;                processOfflineBuffer();             }        }                if (myConfig.ledDisabled) {            digitalWrite(ledBlue, HIGH);            digitalWrite(ledGreen, HIGH);        } else {            digitalWrite(ledBlue, LOW);             digitalWrite(ledGreen, LOW);         }    }    if (currentMillis - lastMeasurementTime &gt;= 500) {        lastMeasurementTime = currentMillis;        ESP.wdtFeed();                 server.handleClient();        yield();                 double rawIrms = emon1.calcIrms(740);                 yield();         double cleanIrms = (rawIrms &gt; noiseOffset) ? rawIrms : 0.0;        currentRMS = cleanIrms;                 State instantaneousState = (cleanIrms &gt;= PX_threshold) ? PX : STOP;        if (instantaneousState != currentFlag) {            if (instantaneousState != targetState) {                targetState = instantaneousState;                stateChangeTimer = currentMillis;             } else if (currentMillis - stateChangeTimer &gt;= DEBOUNCE_TIME) {                                \/\/ \u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b\u0430\u0441\u044c \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u043a\u0435\u0442 PX \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u044b                if (instantaneousState == STOP &amp;&amp; currentFlag == PX) {                    unsigned long durationSec = (currentMillis - pxStartTime) \/ 1000;                    currentFlag = STOP;                    if (!sendWebhook(1, durationSec)) {                        saveEventToBuffer(1, durationSec);                        onlineSent = false;                     }                }                 \/\/ \u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0430\u0441\u044c \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u043b\u0447\u0430 \u0432\u0437\u0432\u043e\u0434\u0438\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0442\u0430\u0439\u043c\u0435\u0440                else if (instantaneousState == PX &amp;&amp; currentFlag == STOP) {                    currentFlag = PX;                    pxStartTime = currentMillis;                 }                stateChangeTimer = 0;             }        } else {            targetState = currentFlag;            stateChangeTimer = 0;        }                static unsigned long lastSerialLogTime = 0;        if (currentMillis - lastSerialLogTime &gt;= 5000) {            lastSerialLogTime = currentMillis;            Serial.printf(\"[MONITOR] \u0422\u043e\u043a: %.2f A | %s | Wi-Fi: %s\\n\",                           cleanIrms, (currentFlag == PX) ? \"\u0420\u0410\u0411\u041e\u0427\u0418\u0419 \u0425\u041e\u0414\" : \"\u0421\u0422\u041e\u041f\", isConnected ? \"ONLINE\" : \"OFFLINE\");        }    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e workflow (\u043a\u043e\u0434 \u0444\u0430\u0439\u043b\u0430 .json)<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0447\u0438\u0441\u043b\u0430 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043f\u0430\u0432\u0448\u0435\u043c (\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c) \u043f\u043e\u0434 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0430 \u0434\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430 &#8212; \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 (\u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0432 \u0442\u0435\u0445\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435) \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 (\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0435, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0435)<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5c5\/297\/396\/5c5297396bff6fb63eb28c5ed8f2606c.JPG\" alt=\"\u0422\u0435\u043a\u0443\u0449\u0438\u0439 workflow\" title=\"\u0422\u0435\u043a\u0443\u0449\u0438\u0439 workflow\" width=\"1148\" height=\"486\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5c5\/297\/396\/5c5297396bff6fb63eb28c5ed8f2606c.JPG 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5c5\/297\/396\/5c5297396bff6fb63eb28c5ed8f2606c.JPG 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0435\u043a\u0443\u0449\u0438\u0439 workflow<\/figcaption><\/div>\n<\/figure>\n<p>\u041b\u0438\u0441\u0442\u0438\u043d\u0433 workflow \u043c\u043e\u0436\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0432 \u0444\u0430\u0439\u043b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f .json &#8212; \u0442\u0438\u043f\u043e\u0432\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c n8n:<\/p>\n<pre><code>{  \"name\": \"\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u041f\u041a\",  \"nodes\": [    {      \"parameters\": {        \"httpMethod\": \"POST\",        \"path\": \"device-monitor\",        \"options\": {}      },      \"name\": \"Webhook\",      \"type\": \"n8n-nodes-base.webhook\",      \"typeVersion\": 1,      \"position\": [        32,        0      ],      \"id\": \"b0292397-eccf-44df-95ed-aaf0ac3a2cf9\",      \"webhookId\": \"03bc596a-14be-4764-8818-9ed7573de00c\"    },    {      \"parameters\": {        \"keepOnlySet\": true,        \"values\": {          \"string\": [            {              \"name\": \"\u0414\u0430\u0442\u0430\",              \"value\": \"={{ $now.format('yyyy-MM-dd') }}\"            },            {              \"name\": \"\u0412\u0440\u0435\u043c\u044f\",              \"value\": \"={{ $now.format('HH:mm:ss') }}\"            },            {              \"name\": \"\u0418\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\",              \"value\": \"={{ $json.body.identifier }}\"            },            {              \"name\": \"\u041c\u0430\u0440\u043a\u0435\u0440\",              \"value\": \"={{ $json.body.mode }}\"            },            {              \"name\": \"\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0441\u0435\u043a)\",              \"value\": \"={{ $json.body.duration }}\"            },            {              \"name\": \"\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\",              \"value\": \"={{ $json.body.device_type }}\"            },            {              \"name\": \"\u0418\u043d\u0432.\u043d\u043e\u043c\u0435\u0440\",              \"value\": \"={{ $json.body.inv_number }}\"            },            {              \"name\": \"\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\",              \"value\": \"={{ $json.body.mac_address }}\"            }          ]        },        \"options\": {}      },      \"name\": \"Format Data\",      \"type\": \"n8n-nodes-base.set\",      \"typeVersion\": 1,      \"position\": [        224,        0      ],      \"id\": \"70134335-0837-4eb4-a94d-4938009842a3\"    },    {      \"parameters\": {        \"rules\": {          \"values\": [            {              \"conditions\": {                \"options\": {                  \"caseSensitive\": true,                  \"leftValue\": \"\",                  \"typeValidation\": \"strict\",                  \"version\": 3                },                \"conditions\": [                  {                    \"id\": \"2e781f25-b9a1-4379-8fae-43abb742f0de\",                    \"leftValue\": \"={{ $json['\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430'] }}\",                    \"rightValue\": \"\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435\",                    \"operator\": {                      \"type\": \"string\",                      \"operation\": \"equals\"                    }                  }                ],                \"combinator\": \"and\"              },              \"renameOutput\": true,              \"outputKey\": \"\u0426\u0435\u0445\"            }          ]        },        \"options\": {          \"fallbackOutput\": \"extra\",          \"renameFallbackOutput\": \"\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435\"        }      },      \"type\": \"n8n-nodes-base.switch\",      \"typeVersion\": 3.4,      \"position\": [        400,        0      ],      \"id\": \"69fb53d5-d7ce-4ae2-9785-283f5cc4b661\",      \"name\": \"Switch\"    },    {      \"parameters\": {        \"jsCode\": \"const d = $input.item.json;\\n\\n\/\/ 1. \u0421\u0442\u0430\u0442\u0443\u0441 (\u041c\u0430\u0440\u043a\u0435\u0440)\\nconst statusMarker = d[\\\"\u041c\u0430\u0440\u043a\u0435\u0440\\\"] !== undefined ? d[\\\"\u041c\u0430\u0440\u043a\u0435\u0440\\\"] : \\\"\\\";\\n\\n\/\/ 2. \u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0441\u0435\u043a)\\nconst duration = d[\\\"\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0441\u0435\u043a)\\\"] !== undefined ? d[\\\"\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0441\u0435\u043a)\\\"] : \\\"0\\\";\\n\\n\/\/ 3. \u0422\u0438\u043f \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f (\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430)\\nconst deviceType = d[\\\"\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\\\"] !== undefined ? d[\\\"\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\\\"] : \\\"\\\";\\n\\n\/\/ 4. \u0418\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440\\nconst invNumber = (d[\\\"\u0418\u043d\u0432\\\"] &amp;&amp; d[\\\"\u0418\u043d\u0432\\\"][\\\"\u043d\u043e\u043c\u0435\u0440\\\"]) !== undefined ? d[\\\"\u0418\u043d\u0432\\\"][\\\"\u043d\u043e\u043c\u0435\u0440\\\"] : \\\"\\\";\\n\\n\/\/ 5. MAC-\u0430\u0434\u0440\u0435\u0441 (\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e)\\nconst macAddress = d[\\\"\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\\\"] !== undefined ? d[\\\"\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\\\"] : \\\"\\\";\\n\\n\/\/ \u0421\u0431\u043e\u0440\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0422\u0417\\nconst csvRow = `${d[\\\"\u0414\u0430\u0442\u0430\\\"]};${d[\\\"\u0412\u0440\u0435\u043c\u044f\\\"]};${d[\\\"\u0418\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\\\"]};${statusMarker};${duration};${deviceType};${invNumber};${macAddress}\\\\r\\\\n`;\\n\\n\/\/ \u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Base64 \u0434\u043b\u044f \u043d\u043e\u0434\u044b \u0437\u0430\u043f\u0438\u0441\u0438 \u0444\u0430\u0439\u043b\u0430\\nconst base64Data = Buffer.from('\\\\ufeff' + csvRow, 'utf8').toString('base64');\\n\\nreturn [\\n  {\\n    json: d,\\n    binary: {\\n      data: {\\n        data: base64Data,\\n        mimeType: 'text\/csv; charset=utf-8',\\n        fileName: 'service_device.csv'\\n      }\\n    }\\n  }\\n];\\n\"      },      \"type\": \"n8n-nodes-base.code\",      \"typeVersion\": 2,      \"position\": [        672,        128      ],      \"id\": \"201f566b-2d05-4492-94d8-4a73616c0ad4\",      \"name\": \"CodeJS_for Service_Device\"    },    {      \"parameters\": {        \"jsCode\": \"const d = $input.item.json;\\n\\n\/\/ 1. \u0421\u0442\u0430\u0442\u0443\u0441 (\u041c\u0430\u0440\u043a\u0435\u0440)\\nconst statusMarker = d[\\\"\u041c\u0430\u0440\u043a\u0435\u0440\\\"] !== undefined ? d[\\\"\u041c\u0430\u0440\u043a\u0435\u0440\\\"] : \\\"\\\";\\n\\n\/\/ 2. \u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0441\u0435\u043a)\\nconst duration = d[\\\"\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0441\u0435\u043a)\\\"] !== undefined ? d[\\\"\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0441\u0435\u043a)\\\"] : \\\"0\\\";\\n\\n\/\/ 3. \u0422\u0438\u043f \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f (\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430)\\nconst deviceType = d[\\\"\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\\\"] !== undefined ? d[\\\"\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\\\"] : \\\"\\\";\\n\\n\/\/ 4. \u0418\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440\\nconst invNumber = (d[\\\"\u0418\u043d\u0432\\\"] &amp;&amp; d[\\\"\u0418\u043d\u0432\\\"][\\\"\u043d\u043e\u043c\u0435\u0440\\\"]) !== undefined ? d[\\\"\u0418\u043d\u0432\\\"][\\\"\u043d\u043e\u043c\u0435\u0440\\\"] : \\\"\\\";\\n\\n\/\/ 5. MAC-\u0430\u0434\u0440\u0435\u0441 (\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e)\\nconst macAddress = d[\\\"\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\\\"] !== undefined ? d[\\\"\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\\\"] : \\\"\\\";\\n\\n\/\/ \u0421\u0431\u043e\u0440\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0422\u0417\\nconst csvRow = `${d[\\\"\u0414\u0430\u0442\u0430\\\"]};${d[\\\"\u0412\u0440\u0435\u043c\u044f\\\"]};${d[\\\"\u0418\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\\\"]};${statusMarker};${duration};${deviceType};${invNumber};${macAddress}\\\\r\\\\n`;\\n\\n\/\/ \u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Base64 \u0434\u043b\u044f \u043d\u043e\u0434\u044b \u0437\u0430\u043f\u0438\u0441\u0438 \u0444\u0430\u0439\u043b\u0430\\nconst base64Data = Buffer.from('\\\\ufeff' + csvRow, 'utf8').toString('base64');\\n\\nreturn [\\n  {\\n    json: d,\\n    binary: {\\n      data: {\\n        data: base64Data,\\n        mimeType: 'text\/csv; charset=utf-8',\\n        fileName: 'monitor.csv'\\n      }\\n    }\\n  }\\n];\"      },      \"type\": \"n8n-nodes-base.code\",      \"typeVersion\": 2,      \"position\": [        672,        -112      ],      \"id\": \"5b5f8cd9-e774-430b-8a37-8211a573293d\",      \"name\": \"CodeJS_for Main_Device\"    },    {      \"parameters\": {        \"operation\": \"write\",        \"fileName\": \"\/shared_files\/monitoring_pila\/monitor.csv\",        \"options\": {          \"append\": true        }      },      \"type\": \"n8n-nodes-base.readWriteFile\",      \"typeVersion\": 1.1,      \"position\": [        880,        -112      ],      \"id\": \"c8b040c8-74d7-42a4-bc99-df69a1c23221\",      \"name\": \"Write monitor.csv\"    },    {      \"parameters\": {        \"operation\": \"write\",        \"fileName\": \"\/shared_files\/monitoring_pila\/service_device.csv\",        \"options\": {          \"append\": true        }      },      \"type\": \"n8n-nodes-base.readWriteFile\",      \"typeVersion\": 1.1,      \"position\": [        880,        128      ],      \"id\": \"37013596-76b9-4d30-8033-a6a523039fb3\",      \"name\": \"Write service_device.csv\"    }  ],  \"pinData\": {},  \"connections\": {    \"Webhook\": {      \"main\": [        [          {            \"node\": \"Format Data\",            \"type\": \"main\",            \"index\": 0          }        ]      ]    },    \"Format Data\": {      \"main\": [        [          {            \"node\": \"Switch\",            \"type\": \"main\",            \"index\": 0          }        ]      ]    },    \"Switch\": {      \"main\": [        [          {            \"node\": \"CodeJS_for Main_Device\",            \"type\": \"main\",            \"index\": 0          }        ],        [          {            \"node\": \"CodeJS_for Service_Device\",            \"type\": \"main\",            \"index\": 0          }        ]      ]    },    \"CodeJS_for Service_Device\": {      \"main\": [        [          {            \"node\": \"Write service_device.csv\",            \"type\": \"main\",            \"index\": 0          }        ]      ]    },    \"CodeJS_for Main_Device\": {      \"main\": [        [          {            \"node\": \"Write monitor.csv\",            \"type\": \"main\",            \"index\": 0          }        ]      ]    }  },  \"active\": true,  \"settings\": {    \"executionOrder\": \"v1\",    \"binaryMode\": \"separate\",    \"availableInMCP\": false  },  \"versionId\": \"d15a7a44-4c7b-4e07-990c-43bf6d036d54\",  \"meta\": {    \"instanceId\": \"9f089c0c79dd0951ae393e7fedf3550c9424b030573aa787574b915237b7b469\"  },  \"id\": \"3bJfGlRw3pcBIR8l\",  \"tags\": []}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p><strong>\u0427\u0442\u043e \u043d\u0430\u043c \u044d\u0442\u043e \u0434\u0430\u0435\u0442?<\/strong><\/p>\n<p>\u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0441\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u043e\u0434\u043f\u0443\u043d\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443:<\/p>\n<ul>\n<li>\n<p><strong>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u044b.<\/strong> \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043e      \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d. \u042f  \u0441\u043a\u0435\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u043d\u043e\u0448\u0443\u0441\u044c \u043a \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u044f\u043c, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 80-85% \u0438 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0434\u0435\u0431\u0430\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u043e\u0433\u0438\u0441\u0442\u0438\u043a\u0438 (\u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434).<\/strong> \u0414\u0435\u0431\u0430\u0442\u044b \u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u044f\u0432\u0438\u043b\u0438 \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043e\u043a \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a. \u0415\u0441\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u0436\u0430\u043b\u043e\u0431\u044b \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0438 \u0431\u044b\u043b\u0438 \u043b\u0438\u0448\u044c \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0438  \u043e\u0446\u0435\u043d\u043e\u0447\u043d\u044b\u043c \u043c\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u0430\u043c\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432 (\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430  \u0432\u0435\u0440\u0438\u043b\u043e), \u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0446\u0438\u0444\u0440\u044b, \u0430 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u0430\u043c\u0435\u0440\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0441\u043a\u043b\u0430\u0434. \u0421\u0442\u0430\u043b\u043e \u0447\u0435\u0442\u043a\u043e \u0432\u0438\u0434\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u043a  \u0441\u0442\u043e\u0438\u0442 \u043c\u0435\u0436\u0434\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u043a\u0430\u043a\u043e\u0432\u0430 \u0438\u0445 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043a\u0430\u043a\u043e\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432 \u00ab\u043b\u0435\u043d\u0438\u0432\u044b\u0445\u00bb \u0440\u0430\u0431\u043e\u0447\u0438\u0445.<\/p>\n<\/li>\n<li>\n<p><strong>\u0423 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0422\u041e\u0438\u0420?!<\/strong> \u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 (\u043f\u043e\u0441\u043b\u0435      \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f) \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u0432\u0438\u0434\u0435\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438      \u0432 \u0441\u0432\u043e\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u0432\u043e\u0437\u0434\u0443\u0448\u043d\u044b\u0435      \u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u043e\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0430 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043e\u0442\u043c\u0435\u0442\u043e\u043a \u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043c\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0437\u0430\u043b\u043e\u0436\u0438\u043b\u043e \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0422\u041e\u0438\u0420 (\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0438 \u0440\u0435\u043c\u043e\u043d\u0442\u0430).<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0441\u0432\u044f\u0437\u043a\u0438 n8n \u0438 Excel. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u043d\u0430\u044f \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <strong>\u0422\u0423\u0420\u0412<\/strong> (<em>\u0442\u0430\u0431\u0435\u043b\u0435\u0439 \u0443\u0447\u0435\u0442\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/em>). \u041e\u0431\u0449\u0443\u044e \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u043b\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043c\u043e\u043d\u0442\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442, \u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u043d\u043e\u0439 \u0441\u043c\u0435\u043d\u043e\u0439 \u043f\u0438\u043b \u0434\u043b\u044f \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430. \u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 1\u0421 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u0446\u0443 \u0433\u043e\u0434\u0430 (\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 &#8212; \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 &#171;\u0445\u043e\u0442\u0435\u043b\u043e\u043a&#187; \u0432 \u043e\u0442\u0447\u0435\u0442\u0430\u0445 )<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u043a\u0430 \u0432\u0441\u0451. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u043e\u0442 \u043a\u0435\u0439\u0441 \u043f\u043e \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0435 \u0446\u0435\u0445\u0430 \u00ab\u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435\u00bb \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0443-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0438\u043b\u0438 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c. \u041d\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0433\u043e\u0442\u043e\u0432 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445!<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1062418\/\">https:\/\/habr.com\/ru\/articles\/1062418\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0448\u043b\u0430 \u0440\u0435\u0447\u044c \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043e\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u0410 \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0448\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 (\u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043b\u0435\u043d\u0442\u043e\u0447\u043d\u044b\u0445 \u043f\u0438\u043b) \u0432 \u0441\u043c\u0435\u043d\u0443? \u041c\u043e\u0436\u0435\u0442, \u043f\u043e\u0432\u0435\u0441\u0438\u043c \u0443\u043c\u043d\u044b\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430?\u00bb\u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0438 \u0432 \u0440\u0430\u0437\u044b \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0447\u0435\u043c \u043f\u043e \u0443\u043c\u043d\u044b\u043c \u043a\u0430\u043c\u0435\u0440\u0430\u043c! \u041f\u0440\u0438\u0447\u0435\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u043d\u0442\u043e\u0447\u043d\u044b\u0445 \u043f\u0438\u043b, \u043d\u043e \u0438 \u0440\u044f\u0434 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442: \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430, \u043c\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u044b \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e (PCB), \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, workflow n8n \u0438 \u043f\u043b\u0430\u043d\u044b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435.\u0421\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043e\u0431\u0440\u0430\u0449\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0432 \u0446\u0438\u0444\u0440\u0443 \u2014 \u0447\u0442\u043e \u043d\u0430\u043c \u044d\u0442\u043e \u0434\u0430\u0435\u0442? \u0421\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043f\u043e\u044f\u0441\u043d\u044e \u043f\u0440\u043e \u043a\u0430\u043a\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u043b\u0430 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0447\u044c:\u0424\u043e\u0442\u043e \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 &#8212; \u043f\u0440\u0438\u043c\u0435\u0440 \u043b\u0435\u043d\u0442\u043e\u0447\u043d\u043e\u043f\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u043a\u0430 (ProTech BS-500DSA)\u0412\u044b\u0448\u0435 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043b\u0435\u043d\u0442\u043e\u043f\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0430\u043d\u043e\u043a: \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u0441 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440\u043e\u043c, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0434\u0430\u0447\u0438 \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u044e\u0449\u0435\u0439 \u0436\u0438\u0434\u043a\u043e\u0441\u0442\u0438 (\u0434\u043b\u044f \u0440\u0435\u0437\u043a\u0438 \u043c\u0435\u0442\u0430\u043b\u043b\u0430, \u043a\u0430\u043a \u0443 \u043d\u0430\u0441), \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0430\u0447\u0438 \u0440\u0435\u0436\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0442\u043d\u0430, \u0437\u0430\u0436\u0438\u043c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0430\u043c\u043e \u043f\u043e\u043b\u043e\u0442\u043d\u043e \u043d\u0430 \u043f\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u043c\u0435. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0430\u043d\u043a\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0447\u0430\u0441\u0442\u043a\u0430, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b. \u041d\u043e, \u0442\u0430\u043a \u0431\u044b\u0432\u0430\u0435\u0442, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u043d\u044b\u043d\u0435\u0448\u043d\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u044f\u0445, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0443 (\u0438\u043b\u0438 \u043c\u0435\u0430\u043d\u0434\u0440, \u043a\u043e\u043c\u0443 \u043a\u0430\u043a \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f). \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0438\u043b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u0431\u0449\u0438\u0439 \u0441\u0440\u043e\u043a \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u0438, \u0434\u0435\u043b\u0430\u044f \u044d\u0442\u043e\u0442 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u043c.\u0412\u043e\u043f\u0440\u043e\u0441 \u043e \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0442\u043e\u0447\u0435\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0447\u0430\u0441\u0442\u043a\u0430. \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u043e \u0432 \u043a\u0430\u043c\u0435\u0440\u044b \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f, \u00ab\u043d\u0430 \u0433\u043b\u0430\u0437\u00bb \u043f\u0440\u0438\u043a\u0438\u043d\u0443\u043b\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u0442\u0430\u043d\u043a\u0430 \u0438 \u0432\u044b\u043d\u0435\u0441\u043b\u043e \u0432\u0435\u0440\u0434\u0438\u043a\u0442: \u0446\u0435\u043b\u0435\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u2014 \u0432\u0441\u0435\u0433\u043e 30-40%, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0442\u043e \u0431\u043e\u043b\u0442\u0430\u0435\u0442, \u0442\u043e \u0432 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u0441\u0438\u0434\u0438\u0442, \u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u0434\u0435-\u0442\u043e \u0445\u043e\u0434\u0438\u0442. \u0418\u043c\u0435\u044f \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 ESP8266\/ESP32 \u044f \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443: \u00ab\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0438\u043d\u0432\u0430\u0437\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0441\u043d\u044f\u0442\u044c \u0447\u0435\u0441\u0442\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443\u00bb.\u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f: \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430 \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 \u043f\u043e\u0440\u0442\u0430\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430 \u0441\u0442\u0430\u043d\u043a\u043e\u0432 \u2014 \u0432\u0437\u044f\u043b\u0438 \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438, \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u044b\u043b \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d \u0434\u0430\u0442\u0447\u0438\u043a \u0442\u043e\u043a\u0430 SCT-013-015 (\u043d\u0430 15\u0410), \u043f\u043b\u0430\u0442\u0430 NodeMCU Lolin v3 (\u043d\u0430 \u0431\u0430\u0437\u0435 ESP8266), M5Stack ATOM Lite (\u043d\u0430 \u0431\u0430\u0437\u0435 ESP32) \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0432\u0435\u0441\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b, \u0438 \u0443\u0436\u0435 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. \u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0430 M5Stack ATOM Lite, \u0430 \u043f\u0438\u043b\u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043d\u0430 NodeMCU Lolin v3 &#8212; \u0438\u043c\u0435\u043d\u043d\u043e \u043e \u043d\u0435\u043c \u0434\u0430\u043b\u0435\u0435 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0440\u0435\u0447\u044c, \u0445\u043e\u0442\u044f, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u0444\u043e\u0442\u043e \u0441 \u0410\u0442\u043e\u043c\u043e\u043c.\u041d\u0443\u043b\u0435\u0432\u043e\u0439, \u0447\u0438\u0441\u0442\u043e \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441 \u0441\u0432\u044f\u0437\u043a\u0438, \u044d\u0442\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440 \u0442\u043e\u043a\u0430 SCT-013-015 \u0432\u044b\u0434\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b (\u043e\u0442 -1V \u0434\u043e +1V), \u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0432\u0445\u043e\u0434 \u0443\u043c\u0435\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 (\u043e\u0442 0V \u0434\u043e 3.3V). \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f.\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u0415\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u00ab\u043f\u043e\u0434\u043d\u044f\u0442\u044c\u00bb \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0432\u0432\u0435\u0440\u0445, \u0447\u0442\u043e\u0431\u044b \u0435\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0446\u0435\u043d\u0442\u0440 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0432\u0445\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (\u043d\u0430 \u043e\u0442\u043c\u0435\u0442\u043a\u0435 1.65V). \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u043b\u043d\u0430 \u043a\u043e\u043b\u0435\u0431\u043b\u0435\u0442\u0441\u044f \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0434\u043b\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435: \u043e\u0442 0.65V \u0434\u043e 2.65V. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0440\u0435\u0437\u0438\u0441\u0442\u0438\u0432\u043d\u044b\u043c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0432\u043d\u044b\u0445 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0432 (\u0432\u0437\u044f\u043b \u043f\u043e 10 \u043a\u041e\u043c), \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0448\u0438\u043d\u043e\u0439 \u043f\u0438\u0442\u0430\u043d\u0438\u044f (3.3V) \u0438 GND. \u0418\u0445 \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0442\u043e\u0447\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u041e\u0434\u0438\u043d \u0432\u044b\u0432\u043e\u0434 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 SCT-013-015 (\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0442\u0435\u043a\u0435\u0440\u0430) \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 (\u043a\u043e\u043d\u0447\u0438\u043a) \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0432\u0445\u043e\u0434 A0 NodeMCU. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c \u0432\u0445\u043e\u0434 A0 \u00ab\u0432\u0438\u0434\u0438\u0442\u00bb \u0441\u0443\u043c\u043c\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u0447\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0443\u0445\u043e\u0434 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u044b \u0432 \u043e\u043f\u0430\u0441\u043d\u0443\u044e \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0437\u043e\u043d\u0443.\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f SCT-013-015 \u043a NodeMCU\u0421\u043e\u0431\u0440\u0430\u043d\u043e, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0435\u0442\u0447 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u043f\u043e\u0440\u0442\u0430:\u0424\u043e\u0442\u043e \u0441 &#171;\u043f\u043e\u043b\u0435\u0432\u044b\u0445&#187; \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439\u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 \u043f\u043e\u0440\u0442\u0430 &#8212; \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u0430\u044f \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439\u0421\u0432\u0430\u0440\u043e\u0447\u043d\u044b\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442 \u0442\u0430\u043a \u0436\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f &#171;\u043d\u0430 \u0443\u0440\u0430&#187; (\u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 ESP32)\u0422\u0435\u0441\u0442\u044b \u0438\u0434\u0435\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u0441\u0440\u0435\u0434\u0435 Arduino IDE \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0436\u0438\u0437\u043d\u0435\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0443\u043c\u043a\u0438: \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0445\u043e\u043b\u043e\u0441\u0442\u043e\u0433\u043e \u0445\u043e\u0434\u0430 (\u043f\u0440\u043e\u0441\u0442\u043e\u044f) \u0441\u0442\u0430\u043d\u043a\u0430 \u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0440\u0435\u0437\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430. \u042d\u0442\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439.\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435: \u0441\u0442\u0430\u0440\u044b\u0439 \u0434\u043e\u0431\u0440\u044b\u0439 Excel \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u044b\u043b\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c low-code \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 n8n, \u0433\u0434\u0435 \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 workflow. \u041e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 .csv \u0444\u0430\u0439\u043b. \u041f\u043e\u0442\u043e\u043a \u0432 n8n: \u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 .csv\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u044b\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 Excel\u0417\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0448\u0442\u0440\u0438\u0445 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0438\u043b\u043e\u0442\u0430 \u2014 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0434\u043b\u044f ESP8266. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c: \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Wi-Fi (\u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 \u0432 \u0446\u0435\u0445\u0430\u0445 \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f), \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 n8n. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:\u0421\u043e\u0431\u044b\u0442\u0438\u0435 ONLINE: \u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0432 \u0441\u0435\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e \u0441\u0432\u043e\u0435\u043c      \u0437\u0430\u043f\u0443\u0441\u043a\u0435. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u0446\u0435\u0445\u0430 \u043d\u0430 \u043d\u043e\u0447\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u0435\u0441\u0442\u043e\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0438 \u0434\u043b\u044f      \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0432\u0430\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438      (\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u043c\u0435\u043d\u044b).\u0420\u0435\u0436\u0438\u043c \u0421\u0422\u041e\u041f: \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u0441\u0442\u0430\u043d\u043a\u0430 (\u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0435\u043d, \u043d\u043e \u043d\u0435 \u0440\u0435\u0436\u0435\u0442) \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043d\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435.\u0420\u0435\u0436\u0438\u043c \u0420\u0410\u0411\u041e\u0427\u0418\u0419 \u0425\u041e\u0414 (\u0420\u0425): \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u0442\u0447\u0438\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u043e\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445). \u041f\u0440\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 (\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0421\u0422\u041e\u041f) \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f: \u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 MAC-\u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0448\u0435\u043b \u0432 Excel, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u043b \u0441\u0432\u0435\u0436\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 .csv \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e: \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0438\u0441\u0442\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043f\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0441\u0442\u0430\u043d\u043a\u0430\u043c \u0438 \u0434\u0430\u0442\u0430\u043c, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438\u0445.\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438\u0437 Excel (\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f)&#187;\u0421\u044b\u0440\u0430\u044f&#187; \u0441\u0432\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 Excel \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 Excel \u0421\u043f\u0443\u0441\u0442\u044f \u043c\u0435\u0441\u044f\u0446 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 (\u0431\u044b\u043b\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0434\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430) \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043b\u043e\u0433\u043e\u0432 \u043f\u0440\u0438\u0448\u043b\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u0430, \u0430, \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0430\u0441\u044c. \u0414\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u0435\u0435 &#8212; \u0442\u0438\u0440\u0430\u0436\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u0442\u0430\u043d\u043a\u043e\u0432 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u043d\u0430 \u043c\u0430\u043a\u0435\u0442\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0430\u0445 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u043d\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 DipTrace \u0431\u044b\u043b\u0430 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u043f\u0435\u0447\u0430\u0442\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0430\u043d\u043e \u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0447\u0435\u0440\u0435\u0437 \u0410\u043b\u0438\u044d\u043a\u0441\u043f\u0440\u0435\u0441\u0441 \u0438 \u0441\u043f\u0443\u0441\u0442\u044f \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 \u043d\u0430 \u041f\u043e\u0447\u0442\u0435 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043c\u044f\u0442\u043e\u0439. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438.\u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u044b\/\u0438\u0437\u0434\u0435\u043b\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442\u041f\u043b\u0430\u0442\u0430, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043c\u043e\u043d\u0442\u0430\u0436\u043d\u0443\u044e \u043a\u043e\u0440\u043e\u0431\u043a\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 100\u0445100\u044550\u043c\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0443\u044e \u0432 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430\u0445. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u0435\u0437 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 (\u0445\u043e\u0442\u044f \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0432\u043e\u0434\u0430 &#8212; GPIO4 \u0438 5) \u0438 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0432 \u043b\u0438\u0446\u0435 Hi-Link HLK-PM03. \u0412\u043c\u0435\u0441\u0442\u043e ESP-12 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ESP-07 \u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0430\u043d\u0442\u0435\u043d\u043d\u043e\u0439\u041f\u043b\u0430\u0442\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438\u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u0440\u043f\u0443\u0441\u0430\u0445\u041f\u043e\u043a\u0430 \u043f\u043b\u0430\u0442\u044b \u0431\u044b\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 &#8212; \u0432 \u043d\u0435\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u042d\u0442\u043e \u0434\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0440\u043e\u0433 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0442\u043e\u043a\u0443 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u043a\u0430 \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e, \u043c\u0435\u043d\u044f\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 n8n, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Wi-Fi \u0438 \u0435\u0449\u0435 \u0440\u044f\u0434 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043c\u0435\u043b\u043e\u0447\u0435\u0439. \u0421\u0430\u043c \u043a\u043e\u0434 \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u0441 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0418\u0418, \u0438, \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u0434\u0430\u043b\u0435\u043a \u043e\u0442 \u0438\u0434\u0435\u0430\u043b\u0430, \u043d\u043e \u0441 \u0432\u043e\u0437\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041f\u0440\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0438 \u0432\u044d\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u043a\u043e\u0434 \u0444\u0430\u0439\u043b\u0430 .ino)\u0412 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b: \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u043f\u043e \u043f\u0430\u0440\u043e\u043b\u044e\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443 (OTA)\u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u044d\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u0438 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0435 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435)\u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a wifi (\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e\/\u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e)\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u044d\u0431\u0445\u0443\u043a\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a wifi\u0412\u044d\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0422.\u043a. \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u043e \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0441 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u041a\u043e\u0434 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c &#171;\u043a\u0430\u043a \u0435\u0441\u0442\u044c&#187; \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0430\u0446\u0438\u0438#include &lt;ESP8266WiFi.h&gt;#include &lt;ESP8266WebServer.h&gt;#include &lt;ESP8266HTTPClient.h&gt;#include &lt;ESP8266HTTPUpdateServer.h&gt; #include &lt;WiFiClient.h&gt;#include &lt;FS.h&gt;#include &lt;LittleFS.h&gt;#include &#171;EmonLib.h&#187;\/\/ =========================================================================\/\/ \u0411\u041b\u041e\u041a \u0426\u0415\u041d\u0422\u0420\u0410\u041b\u042c\u041d\u042b\u0425 \u041d\u0410\u0421\u0422\u0420\u041e\u0415\u041a (\u0417\u0414\u0415\u0421\u042c \u041c\u0415\u041d\u042f\u0422\u042c \u0414\u0410\u041d\u041d\u042b\u0415 \u041f\u041e \u0423\u041c\u041e\u041b\u0427\u0410\u041d\u0418\u042e)\/\/ =========================================================================const char* WIFI_SSID_DEFAULT   = &#171;YOU_WIFI&#187;;          const char* WIFI_PASS_DEFAULT   = &#171;password_wifi&#187;;    const char* ADMIN_PASS_DEFAULT  = &#171;admin&#187;;           const char* N8N_WEBHOOK_DEFAULT = &#171;http:\/\/192.168.11.11:5678\/webhook\/device-monitor&#187;; \/\/ =========================================================================\/\/ \u0421\u0422\u0420\u0423\u041a\u0422\u0423\u0420\u0410 \u041d\u0410\u0421\u0422\u0420\u041e\u0415\u041a (\u0425\u0420\u0410\u041d\u0418\u0422\u0421\u042f \u0412 LITTLEFS)\/\/ =========================================================================struct WebConfig {  char wifi_ssid[32];  char wifi_pass[64];  char admin_pass[32];  char n8n_webhook[128];  float currentThreshold;  bool ledDisabled;     \/\/ \u041f\u043e\u043b\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438  char company_name[64];  char header_desc[64];  char device_type[32];  char inv_number[32];     char header_color[16];     char menu_color[16];       char bg_color[16];       };WebConfig myConfig;\/\/ &#8212; \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0418 \u0416\u0415\u041b\u0415\u0417\u0410 ESP-12F \u0418 \u041a\u0410\u041b\u0418\u0411\u0420\u041e\u0412\u041a\u0418 &#8212;const int sensorPin = A0;const int ledBlue   = LED_BUILTIN; const int ledGreen  = 12;          const int ledRed    = 13;          EnergyMonitor emon1;float calibrationK = 15.0;    float noiseOffset = 1.18;    float voltage = 230.0;       \/\/ &#8212; \u041f\u041e\u0420\u041e\u0413\u0418 \u0418 \u0422\u0410\u0419\u041c\u0418\u041d\u0413\u0418 &#8212;float PX_threshold = 4.0;     const unsigned long DEBOUNCE_TIME =&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-488354","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/488354","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=488354"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/488354\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=488354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=488354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=488354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}