{"id":1126,"date":"2026-07-16T09:13:20","date_gmt":"2026-07-16T09:13:20","guid":{"rendered":"https:\/\/iotmanager.org\/?page_id=1126"},"modified":"2026-07-16T10:58:30","modified_gmt":"2026-07-16T10:58:30","slug":"instruct2","status":"publish","type":"page","link":"https:\/\/iotmanager.org\/en\/instruct2\/","title":{"rendered":"\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f 2 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f"},"content":{"rendered":"<div class=\"iotm-arch\">\n<style>\n\/* ---- \u0432\u0441\u0451 \u0432\u043d\u0443\u0442\u0440\u0438 .iotm-arch, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0441 \u0442\u0435\u043c\u043e\u0439 WP ---- *\/\n.iotm-arch{\n  --iotm-accent:#1f6feb; --iotm-accent-d:#1550b8; --iotm-dark:#0d1117;\n  --iotm-text:#24292f; --iotm-grey:#57606a; --iotm-light:#f0f3f6;\n  --iotm-border:#d0d7de; --iotm-green:#1a7f37; --iotm-red:#cf222e;\n  --iotm-amber:#9a6700; --iotm-panel:#fbfcfd;\n  max-width:960px; margin:0 auto; padding:6px 4px;\n  font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n  color:var(--iotm-text); line-height:1.62; font-size:16px; background:transparent;\n  -webkit-font-smoothing:antialiased; box-sizing:border-box;\n}\n.iotm-arch *{box-sizing:border-box;}\n.iotm-arch code{\n  font-family:\"SFMono-Regular\",Consolas,Menlo,monospace; background:var(--iotm-light);\n  padding:.12em .4em; border-radius:5px; font-size:.87em; color:#1f2328;\n  border:1px solid #e3e8ee; word-break:break-word;\n}\n.iotm-arch pre{\n  background:var(--iotm-light); border:1px solid var(--iotm-border); border-radius:8px;\n  padding:14px 16px; overflow-x:auto; font-size:.85em; line-height:1.5; margin:1em 0;\n}\n.iotm-arch pre code{background:none; border:none; padding:0; white-space:pre; display:block;\n  word-break:normal;}\n.iotm-arch h2,.iotm-arch h3,.iotm-arch h4{line-height:1.25;}\n.iotm-arch h2{font-size:1.55em; color:var(--iotm-dark); font-weight:700;\n  border-bottom:2px solid var(--iotm-light); padding-bottom:.3em; margin:2.2em 0 .6em;}\n.iotm-arch h3{font-size:1.22em; color:var(--iotm-accent); font-weight:700; margin:1.6em 0 .4em;}\n.iotm-arch h4{font-size:1.05em; color:var(--iotm-dark); font-weight:700; margin:1.2em 0 .3em;}\n.iotm-arch p{margin:.65em 0;}\n.iotm-arch a{color:var(--iotm-accent); text-decoration:none;}\n.iotm-arch a:hover{text-decoration:underline;}\n.iotm-arch ul,.iotm-arch ol{margin:.6em 0 .9em; padding-left:1.6em;}\n.iotm-arch li{margin:.32em 0;}\n.iotm-arch ul li::marker{color:var(--iotm-accent);}\n.iotm-arch ol li::marker{color:var(--iotm-accent); font-weight:700;}\n.iotm-arch table{border-collapse:collapse; width:100%; margin:1.1em 0; font-size:.9em;\n  border:1px solid var(--iotm-border); border-radius:8px; overflow:hidden;}\n.iotm-arch thead th{background:var(--iotm-accent); color:#fff; text-align:left;\n  padding:9px 12px; font-weight:600;}\n.iotm-arch tbody td{padding:8px 12px; border-top:1px solid var(--iotm-border); vertical-align:top;}\n.iotm-arch tbody tr:nth-child(odd){background:var(--iotm-light);}\n.iotm-arch .iotm-callout{border-left:5px solid var(--iotm-accent); background:var(--iotm-panel);\n  border-top:1px solid #e1e4e8; border-right:1px solid #e1e4e8; border-bottom:1px solid #e1e4e8;\n  border-radius:0 8px 8px 0; padding:11px 16px; margin:1.1em 0;}\n.iotm-arch .iotm-callout.green{border-left-color:var(--iotm-green);}\n.iotm-arch .iotm-callout.red{border-left-color:var(--iotm-red);}\n.iotm-arch .iotm-callout.amber{border-left-color:var(--iotm-amber);}\n.iotm-arch .iotm-callout b.lbl{color:var(--iotm-accent);}\n.iotm-arch .iotm-callout.green b.lbl{color:var(--iotm-green);}\n.iotm-arch .iotm-callout.red b.lbl{color:var(--iotm-red);}\n.iotm-arch .iotm-callout.amber b.lbl{color:var(--iotm-amber);}\n.iotm-arch .iotm-cover{background:linear-gradient(150deg,#0d1117 0%,#15263f 55%,#1f6feb 140%);\n  color:#fff; padding:44px 22px 38px; text-align:center; border-radius:12px; margin-bottom:6px;}\n.iotm-arch .iotm-cover .kick{letter-spacing:3px; text-transform:uppercase; font-size:.8em; color:#9fc2f5;}\n.iotm-arch .iotm-cover .ttl{font-size:2.4em; margin:.15em 0 .1em; font-weight:800; letter-spacing:-1px; line-height:1.15;}\n.iotm-arch .iotm-cover .sub{font-size:1.2em; color:#cfe0f7; font-weight:500;}\n.iotm-arch .iotm-cover .meta{margin-top:18px; font-size:.85em; color:#9fb4d0;}\n.iotm-arch .iotm-cover .meta code{background:rgba(255,255,255,.14); color:#dbe9ff; border-color:transparent;}\n.iotm-arch nav.iotm-toc{background:var(--iotm-panel); border:1px solid var(--iotm-border);\n  border-radius:10px; padding:16px 26px; margin:24px 0;}\n.iotm-arch nav.iotm-toc ol{padding-left:1.3em; margin:.4em 0 0;}\n.iotm-arch nav.iotm-toc a{color:var(--iotm-text);}\n.iotm-arch nav.iotm-toc a:hover{color:var(--iotm-accent);}\n.iotm-arch .iotm-foot{border-top:1px solid var(--iotm-border); margin-top:36px; padding-top:16px;\n  font-size:.85em; color:var(--iotm-grey); text-align:center;}\n@media (max-width:640px){\n  .iotm-arch{font-size:15px;}\n  .iotm-arch .iotm-cover .ttl{font-size:1.8em;}\n  .iotm-arch pre{font-size:.78em;} .iotm-arch table{font-size:.82em;}\n}\n<\/style>\n\n<div class=\"iotm-cover\">\n  <div class=\"kick\">IoTManager \u00b7 \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/div>\n  <div class=\"ttl\">\u041a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c<\/div>\n  <div class=\"sub\">\u041f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445<\/div>\n  <div class=\"meta\">\n    \u0412\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 1.0 \u00b7 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0432\u0435\u0442\u043a\u0438 <code>ver4stable<\/code><br>\n    <code>github.com\/IoTManagerProject\/IoTManager<\/code>\n  <\/div>\n<\/div>\n\n<nav class=\"iotm-toc\">\n  <strong>Content<\/strong>\n  <ol>\n    <li><a href=\"#iotm-mod-1\">\u041e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435<\/a><\/li>\n    <li><a href=\"#iotm-mod-2\">\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 (\u043a\u0440\u0430\u0442\u043a\u043e)<\/a><\/li>\n    <li><a href=\"#iotm-mod-3\">\u0416\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043c\u043e\u0434\u0443\u043b\u044f<\/a><\/li>\n    <li><a href=\"#iotm-mod-4\">\u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f: \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430<\/a><\/li>\n    <li><a href=\"#iotm-mod-5\">\u0424\u0430\u0439\u043b .cpp \u2014 \u043a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f<\/a><\/li>\n    <li><a href=\"#iotm-mod-6\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438<\/a><\/li>\n    <li><a href=\"#iotm-mod-7\">\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430: \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043d\u0443\u043b\u044f<\/a><\/li>\n    <li><a href=\"#iotm-mod-8\">\u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u0438 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438<\/a><\/li>\n    <li><a href=\"#iotm-mod-9\">\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a<\/a><\/li>\n  <\/ol>\n<\/nav>\n\n<h2 id=\"iotm-mod-1\">1. \u041e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435<\/h2>\n<p>\u042d\u0442\u043e\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 IoTManager \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430: \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u044f\u0437\u044b\u043a\u043e\u043c C++ \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 (\u043a\u043b\u0430\u0441\u0441\u044b, \u0444\u0443\u043d\u043a\u0446\u0438\u0438) \u0438 \u0443\u043c\u0435\u0435\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0441\u043a\u0435\u0442\u0447\u0438 \u0434\u043b\u044f Arduino.<\/p>\n<p><b>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f:<\/b> \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u0441\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041c\u043e\u0434\u0443\u043b\u044c \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 C++ \u043a\u043b\u0430\u0441\u0441 \u043f\u043b\u044e\u0441 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f <code>modinfo.json<\/code>. \u042f\u0434\u0440\u043e \u0441\u0430\u043c\u043e \u043d\u0430\u0439\u0434\u0451\u0442 \u0432\u0430\u0448 \u043c\u043e\u0434\u0443\u043b\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u0435\u0433\u043e \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0430\u0448 \u043a\u043e\u0434 \u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b.<\/p>\n<div class=\"iotm-callout\"><b class=\"lbl\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043c\u043e\u0434\u0443\u043b\u044c:<\/b> \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0434\u0430\u0442\u0447\u0438\u043a, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441. \u0415\u0441\u043b\u0438 \u0434\u0430\u0442\u0447\u0438\u043a \u0432\u044b\u0434\u0430\u0451\u0442 \u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443, \u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430.<\/div>\n\n<h3>1.1. \u0427\u0442\u043e \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f<\/h3>\n<ul>\n  <li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 <b>PlatformIO<\/b> (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f VS Code) \u2014 \u0441\u0440\u0435\u0434\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.<\/li>\n  <li><b>Python 3<\/b> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <code>PrepareProject.py<\/code>.<\/li>\n  <li>\u041f\u043b\u0430\u0442\u0430 <b>esp8266<\/b> \u0438\u043b\u0438 <b>esp32<\/b>, USB-\u043a\u0430\u0431\u0435\u043b\u044c \u0438 \u0441\u0430\u043c \u0434\u0430\u0442\u0447\u0438\u043a\/\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u044c.<\/li>\n  <li>\u0413\u043e\u0442\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d <code>ExampleModule<\/code> \u2014 \u043e\u043d \u0443\u0436\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d. \u042d\u0442\u043e \u0432\u0430\u0448\u0430 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430.<\/li>\n<\/ul>\n\n<h2 id=\"iotm-mod-2\">2. \u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 (\u043a\u0440\u0430\u0442\u043a\u043e)<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u0439. \u041d\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u0441\u0442\u0435\u043a\u0435, MQTT \u0438\u043b\u0438 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u044f\u0434\u0440\u043e \u0431\u0435\u0440\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f.<\/p>\n\n<h3>2.1. \u042f\u0434\u0440\u043e \u0438 \u043c\u043e\u0434\u0443\u043b\u0438<\/h3>\n<p>\u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 <b>\u044f\u0434\u0440\u0430<\/b> (\u043f\u0430\u043f\u043a\u0438 <code>src\/<\/code>, <code>include\/<\/code>) \u0438 <b>\u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/b> (\u043f\u0430\u043f\u043a\u0430 <code>src\/modules\/<\/code>). \u042f\u0434\u0440\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 Wi-Fi, MQTT, \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u0440\u043e\u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u041c\u043e\u0434\u0443\u043b\u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u00ab\u0436\u0435\u043b\u0435\u0437\u043e\u00bb.<\/p>\n<p>\u041c\u043e\u0434\u0443\u043b\u0438 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c (\u044d\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0432 \u043c\u0435\u043d\u044e \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430):<\/p>\n<table>\n  <thead><tr><th>\u041f\u0430\u043f\u043a\u0430<\/th><th>\u0420\u0430\u0437\u0434\u0435\u043b \u043c\u0435\u043d\u044e<\/th><th>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/th><th>\u041a\u043e\u043b-\u0432\u043e<\/th><\/tr><\/thead>\n  <tbody>\n    <tr><td><code>sensors<\/code><\/td><td>\u0421\u0435\u043d\u0441\u043e\u0440\u044b<\/td><td>\u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 (\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u043e\u043a\u2026)<\/td><td>49<\/td><\/tr>\n    <tr><td><code>exec<\/code><\/td><td>\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435<\/td><td>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 (\u0440\u0435\u043b\u0435, \u0428\u0418\u041c, \u0441\u0435\u0440\u0432\u043e, Telegram\u2026)<\/td><td>30<\/td><\/tr>\n    <tr><td><code>display<\/code><\/td><td>\u042d\u043a\u0440\u0430\u043d\u044b<\/td><td>\u0412\u044b\u0432\u043e\u0434 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0438 \u0438 \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0435 \u043b\u0435\u043d\u0442\u044b<\/td><td>12<\/td><\/tr>\n    <tr><td><code>virtual<\/code><\/td><td>\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435<\/td><td>\u0420\u0430\u0441\u0447\u0451\u0442\u044b \u0431\u0435\u0437 \u0436\u0435\u043b\u0435\u0437\u0430 (\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430, \u0442\u0430\u0439\u043c\u0435\u0440\u044b, \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u2026)<\/td><td>18<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<h3>2.2. \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 IoTItem<\/h3>\n<p>\u041b\u044e\u0431\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442 <code>IoTItem<\/code> (\u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0432 <code>include\/classes\/IoTItem.h<\/code>). \u042d\u0442\u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u0430\u0451\u0442 \u0432\u0430\u0448\u0435\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044e \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435: \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u043f\u0440\u043e\u0441\u0430, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u0441\u0432\u044f\u0437\u044c \u0441 \u044f\u0434\u0440\u043e\u043c.<\/p>\n<p>\u0421\u0430\u043c\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<table>\n  <thead><tr><th>\u042d\u043b\u0435\u043c\u0435\u043d\u0442<\/th><th>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442<\/th><\/tr><\/thead>\n  <tbody>\n    <tr><td><code>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440(String parameters)<\/code><\/td><td>\u0410\u043d\u0430\u043b\u043e\u0433 setup(): \u0447\u0438\u0442\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0437 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0436\u0435\u043b\u0435\u0437\u043e.<\/td><\/tr>\n    <tr><td><code>doByInterval()<\/code><\/td><td>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 int \u0441\u0435\u043a\u0443\u043d\u0434. \u0417\u0434\u0435\u0441\u044c \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0434\u0430\u0442\u0447\u0438\u043a \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/td><\/tr>\n    <tr><td><code>loop()<\/code><\/td><td>\u041f\u043e\u043b\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 loop() Arduino. \u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/td><\/tr>\n    <tr><td><code>regEvent(...)<\/code><\/td><td>\u0421\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u044f\u0434\u0440\u0443 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432.<\/td><\/tr>\n    <tr><td><code>value<\/code><\/td><td>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 IoTValue \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 valD (\u0447\u0438\u0441\u043b\u043e) \u0438 valS (\u0441\u0442\u0440\u043e\u043a\u0430) \u2014 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/td><\/tr>\n    <tr><td><code>execute(cmd, param)<\/code><\/td><td>\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432.<\/td><\/tr>\n    <tr><td><code>onModuleOrder(key, value)<\/code><\/td><td>\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u0441 \u043f\u0430\u043d\u0435\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044f.<\/td><\/tr>\n    <tr><td><code>~\u0414\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440()<\/code><\/td><td>\u041e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<h3>2.3. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f IoTValue<\/h3>\n<p>\u0412\u0441\u0451, \u0447\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u00ab\u043e\u0442\u0434\u0430\u0451\u0442\u00bb \u044f\u0434\u0440\u0443, \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435:<\/p>\n<pre><code>struct IoTValue {\n    float  valD = 0;      \/\/ \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u0442\u043e\u043a...)\n    String valS = \"\";     \/\/ \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0442\u0435\u043a\u0441\u0442, \u0441\u0442\u0430\u0442\u0443\u0441...)\n    bool   isDecimal = true;  \/\/ true = \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f valD, false = valS\n};<\/code><\/pre>\n<div class=\"iotm-callout green\"><b class=\"lbl\">\u041f\u0440\u0430\u0432\u0438\u043b\u043e:<\/b> \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 \u0434\u0430\u0442\u0447\u0438\u043a \u0432\u044b\u0434\u0430\u0451\u0442 \u0447\u0438\u0441\u043b\u043e \u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 value.valD. \u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u2014 \u0432 value.valS. \u042f\u0434\u0440\u043e \u0441\u0430\u043c\u043e \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/div>\n\n<h2 id=\"iotm-mod-3\">3. \u0416\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043c\u043e\u0434\u0443\u043b\u044f<\/h2>\n<p>\u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u044f\u0434\u0440\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0448 \u043a\u043e\u0434, \u2014 \u043a\u043b\u044e\u0447 \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f. \u0412\u043e\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043e\u0442 \u0441\u0442\u0430\u0440\u0442\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ol>\n  <li><b>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435<\/b> \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u044f (\u043f\u0438\u043d, \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0438 \u0442. \u0434.). \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a JSON.<\/li>\n  <li>\u042f\u0434\u0440\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>getAPI_\u0418\u043c\u044f\u041c\u043e\u0434\u0443\u043b\u044f()<\/code>, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0435\u0439 <code>subtype<\/code> \u0438 \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/li>\n  <li><b>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430<\/b> \u2014 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 <b>\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440<\/b>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0435 \u0436\u0435\u043b\u0435\u0437\u043e.<\/li>\n  <li>\u041a\u0430\u0436\u0434\u044b\u0435 <code>int<\/code> \u0441\u0435\u043a\u0443\u043d\u0434 \u044f\u0434\u0440\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <b><code>doByInterval()<\/code><\/b> \u2014 \u0432\u044b \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0434\u0430\u0442\u0447\u0438\u043a \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0435 <code>regEvent()<\/code>.<\/li>\n  <li><b>\u042f\u0434\u0440\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/b>: \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0448\u043b\u0451\u0442 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 MQTT, \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u043c.<\/li>\n  <li>\u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u2014 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 <b>\u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440<\/b>.<\/li>\n<\/ol>\n<div class=\"iotm-callout red\"><b class=\"lbl\">\u0412\u0430\u0436\u043d\u043e \u043f\u0440\u043e delay():<\/b> \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 delay() \u0438 \u0434\u043e\u043b\u0433\u0438\u0435 \u0446\u0438\u043a\u043b\u044b. loop() \u0438 doByInterval() \u043e\u0431\u0449\u0438\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u2014 \u00ab\u0437\u0430\u0432\u0438\u0441\u043d\u0443\u0442\u00bb \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438. \u0414\u043b\u0438\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0439\u0442\u0435 \u043d\u0430 \u043f\u043e\u0440\u0446\u0438\u0438 \u043f\u043e \u0442\u0430\u043a\u0442\u0430\u043c.<\/div>\n\n<h2 id=\"iotm-mod-4\">4. \u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f: \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430<\/h2>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0436\u0438\u0432\u0451\u0442 \u0432 \u0441\u0432\u043e\u0435\u0439 \u043f\u0430\u043f\u043a\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0443\u0436\u043d\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>src\/modules\/sensors\/\u041c\u043e\u0439\u0414\u0430\u0442\u0447\u0438\u043a\/<\/code>. \u0412\u043d\u0443\u0442\u0440\u0438 \u2014 \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<table>\n  <thead><tr><th>\u0424\u0430\u0439\u043b<\/th><th>\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d<\/th><th>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/th><\/tr><\/thead>\n  <tbody>\n    <tr><td><code>\u041c\u043e\u0439\u0414\u0430\u0442\u0447\u0438\u043a.cpp<\/code><\/td><td>\u0414\u0430<\/td><td>\u041a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f: \u043a\u043b\u0430\u0441\u0441\u044b, \u043b\u043e\u0433\u0438\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u044f, \u0444\u0443\u043d\u043a\u0446\u0438\u044f getAPI.<\/td><\/tr>\n    <tr><td><code>modinfo.json<\/code><\/td><td>\u0414\u0430<\/td><td>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f: \u043f\u043e\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0430\u0432\u0442\u043e\u0440, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043c\u0435\u043d\u044e.<\/td><\/tr>\n    <tr><td><code>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.h \/ .cpp<\/code><\/td><td>\u041d\u0435\u0442<\/td><td>\u0421\u0432\u043e\u044f \u0438\u043b\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044f\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430.<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<h3>4.1. \u0424\u0430\u0439\u043b modinfo.json \u2014 \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u043c\u043e\u0434\u0443\u043b\u044f<\/h3>\n<p>\u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u044f\u0434\u0440\u043e \u0447\u0438\u0442\u0430\u0435\u0442 <b>\u0434\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/b>. \u0418\u0437 \u043d\u0435\u0433\u043e \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f: \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e, \u0444\u043e\u0440\u043c\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0430. \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0435\u0433\u043e \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0437 <code>ExampleModule<\/code>.<\/p>\n\n<h4>\u0411\u043b\u043e\u043a menuSection<\/h4>\n<pre><code>\"menuSection\": \"sensors\",<\/code><\/pre>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u043c\u0435\u043d\u044e \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u043c\u043e\u0434\u0443\u043b\u044c. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: <code>sensors<\/code>, <code>executive_devices<\/code>, <code>screens<\/code>, <code>virtual_elments<\/code>.<\/p>\n\n<h4>\u0411\u043b\u043e\u043a configItem \u2014 \u043f\u043e\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a<\/h4>\n<p>\u041c\u0430\u0441\u0441\u0438\u0432 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c. \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 (\u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 \u0432 .cpp):<\/p>\n<pre><code>\"configItem\": [\n  {\n    \"name\":    \"\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0410\",     \/\/ \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435\n    \"type\":    \"Reading\",              \/\/ \u0442\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\n    \"subtype\": \"ExampleModule_A\",      \/\/ \u0441\u0432\u044f\u0437\u044c \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u0432 .cpp !!!\n    \"id\":      \"Tmp\",                  \/\/ \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n    \"widget\":  \"anydataTmp\",           \/\/ \u0432\u0438\u0434\u0436\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\n    \"page\":    \"\u0421\u0435\u043d\u0441\u043e\u0440\u044b\",              \/\/ \u0432\u043a\u043b\u0430\u0434\u043a\u0430 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435\n    \"descr\":   \"\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430\",          \/\/ \u043f\u043e\u0434\u043f\u0438\u0441\u044c\n    \"int\":     15,                     \/\/ \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u043f\u0440\u043e\u0441\u0430, \u0441\u0435\u043a\n    \"pin\":     \"32\",                   \/\/ \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\n    \"round\":   1\n  }\n]<\/code><\/pre>\n<div class=\"iotm-callout\"><b class=\"lbl\">\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0441\u0432\u044f\u0437\u044c:<\/b> \u043f\u043e\u043b\u0435 subtype \u0432 JSON \u0434\u043e\u043b\u0436\u043d\u043e \u0422\u041e\u0427\u041d\u041e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0430 \u0432 .cpp \u0438 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 getAPI. \u042d\u0442\u043e \u00ab\u043a\u043b\u0435\u0439\u00bb, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u044f\u0434\u0440\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441.<\/div>\n<p>\u041b\u044e\u0431\u043e\u0435 \u043f\u043e\u043b\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0432 <code>configItem<\/code> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>\"pin\": \"32\"<\/code>), \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0432 \u0432\u0435\u0431-\u0444\u043e\u0440\u043c\u0435, \u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0447\u0435\u0440\u0435\u0437 <code>jsonReadInt(parameters, \"pin\")<\/code>.<\/p>\n\n<h4>\u0411\u043b\u043e\u043a about \u2014 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0430<\/h4>\n<pre><code>\"about\": {\n  \"authorName\":    \"\u0418\u0432\u0430\u043d \u0418\u0432\u0430\u043d\u043e\u0432\",\n  \"authorContact\": \"https:\/\/t.me\/ivan\",\n  \"moduleName\":    \"ExampleModule\",   \/\/ = \u0438\u043c\u044f \u0432 getAPI_ !!!\n  \"moduleVersion\": \"1.0\",\n  \"usedRam\": { \"esp32_4mb\": 15, \"esp8266_4mb\": 15 },\n  \"title\":       \"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f\",\n  \"moduleDesc\":  \"\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438\",\n  \"propInfo\": {                        \/\/ \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043a \u043f\u043e\u043b\u044f\u043c\n    \"pin\": \"GPIO, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u0434\u0430\u0442\u0447\u0438\u043a\",\n    \"int\": \"\u0421\u0435\u043a\u0443\u043d\u0434 \u043c\u0435\u0436\u0434\u0443 \u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438\"\n  },\n  \"funcInfo\": [ ... ]                   \/\/ \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432\n}<\/code><\/pre>\n<div class=\"iotm-callout red\"><b class=\"lbl\">\u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0441\u0432\u044f\u0437\u044c:<\/b> moduleName \u0432 \u0431\u043b\u043e\u043a\u0435 about \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 getAPI_\u2026 \u0432 \u0432\u0430\u0448\u0435\u043c .cpp. \u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e \u0438\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u00ab\u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c\u00bb \u0432\u0430\u0448 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u044f\u0434\u0440\u043e.<\/div>\n\n<h4>\u0411\u043b\u043e\u043a\u0438 defActive \u0438 usedLibs<\/h4>\n<pre><code>\"defActive\": false,          \/\/ \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n\"usedLibs\": {                \/\/ \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043b\u0430\u0442\u044b\n    \"esp32*\":  [ \"milesburton\/DallasTemperature @ ^4.0.4\" ],\n    \"esp82*\":  [ \"milesburton\/DallasTemperature @ ^4.0.4\" ]\n}<\/code><\/pre>\n<p>\u0412 <code>usedLibs<\/code> \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 PlatformIO. \u041a\u043b\u044e\u0447\u0438 <code>esp32*<\/code> and <code>esp82*<\/code> \u2014 \u043c\u0430\u0441\u043a\u0438 \u0434\u043b\u044f \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432 \u043f\u043b\u0430\u0442. \u0415\u0441\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u2014 \u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u043a\u0430\u043a \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435.<\/p>\n\n<h2 id=\"iotm-mod-5\">5. \u0424\u0430\u0439\u043b .cpp \u2014 \u043a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f<\/h2>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>ExampleModule.cpp<\/code> \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437. \u042d\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u2014 \u0432\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0435 \u0435\u0433\u043e \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u0438\u043c\u0435\u043d\u0430 \u043d\u0430 \u0441\u0432\u043e\u0438.<\/p>\n\n<h3>5.1. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430<\/h3>\n<pre><code>#include \"Global.h\"              \/\/ \u044f\u0434\u0440\u043e IoTM (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)\n#include \"classes\/IoTItem.h\"      \/\/ \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)\n\n#include &lt;DallasTemperature.h&gt;    \/\/ \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044f\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 (\u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430)\n\nextern IoTGpio IoTgpio;           \/\/ \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 include \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u0432\u0441\u0435\u0433\u0434\u0430. \u0421\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0443\u0433\u043b\u043e\u0432\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 <code>&lt; &gt;<\/code> \u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 <code>usedLibs<\/code>. \u041e\u0431\u044a\u0435\u043a\u0442 <code>IoTgpio<\/code> \u0434\u0430\u0451\u0442 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>analogRead()<\/code>, <code>digitalWrite()<\/code> \u0438 \u0442. \u043f.<\/p>\n\n<h3>5.2. \u041a\u043b\u0430\u0441\u0441 \u043c\u043e\u0434\u0443\u043b\u044f<\/h3>\n<p>\u041a\u043b\u0430\u0441\u0441 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 <code>IoTItem<\/code>. \u0418\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 = <code>subtype<\/code> \u0438\u0437 JSON. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0435\u043d\u0441\u043e\u0440 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>class ExampleModule_A : public IoTItem {\nprivate:\n    unsigned int _pin;              \/\/ \u0445\u0440\u0430\u043d\u0438\u043c \u043d\u043e\u043c\u0435\u0440 \u043f\u0438\u043d\u0430\n\npublic:\n    \/\/ --- \u041a\u041e\u041d\u0421\u0422\u0420\u0423\u041a\u0422\u041e\u0420 (\u0430\u043d\u0430\u043b\u043e\u0433 setup) ---\n    ExampleModule_A(String parameters) : IoTItem(parameters) {\n        _pin = jsonReadInt(parameters, \"pin\");   \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u043f\u043e\u043b\u0435 \"pin\"\n        jsonRead(parameters, \"int\", _interval, false);\n        \/\/ \u0437\u0434\u0435\u0441\u044c \u0436\u0435: sensor.begin(), pinMode() \u0438 \u0442. \u043f.\n    }\n\n    \/\/ --- \u0427\u0422\u0415\u041d\u0418\u0415 \u041f\u041e \u0418\u041d\u0422\u0415\u0420\u0412\u0410\u041b\u0423 (\u0430\u043d\u0430\u043b\u043e\u0433 loop) ---\n    void doByInterval() {\n        value.valD = analogRead(_pin) * 0.1;     \/\/ \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\n        regEvent(value.valD, \"ExampleModule\");   \/\/ \u043e\u0442\u0434\u0430\u0451\u043c \u044f\u0434\u0440\u0443\n    }\n\n    \/\/ --- \u0414\u0415\u0421\u0422\u0420\u0423\u041a\u0422\u041e\u0420 ---\n    ~ExampleModule_A() { \/* \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b *\/ };\n};<\/code><\/pre>\n\n<h4>\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a<\/h4>\n<p>\u0412\u0441\u0435 \u043f\u043e\u043b\u044f \u0438\u0437 <code>configItem<\/code> \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043e\u0434\u043d\u043e\u0439 JSON-\u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code>parameters<\/code>. \u0414\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<table>\n  <thead><tr><th>\u0424\u0443\u043d\u043a\u0446\u0438\u044f<\/th><th>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442<\/th><th>\u041f\u0440\u0438\u043c\u0435\u0440<\/th><\/tr><\/thead>\n  <tbody>\n    <tr><td><code>jsonReadInt(p, \"pin\")<\/code><\/td><td>int<\/td><td>\u043d\u043e\u043c\u0435\u0440 \u043f\u0438\u043d\u0430 32<\/td><\/tr>\n    <tr><td><code>jsonReadStr(p, \"id\")<\/code><\/td><td>String<\/td><td>\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440<\/td><\/tr>\n    <tr><td><code>jsonReadBool(p, \"flag\")<\/code><\/td><td>bool<\/td><td>true \/ false<\/td><\/tr>\n    <tr><td><code>jsonRead(p, \"int\", var, false)<\/code><\/td><td>\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e<\/td><td>\u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b, \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u2026<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<h3>5.3. \u0424\u0443\u043d\u043a\u0446\u0438\u044f-\u043c\u043e\u0441\u0442 getAPI<\/h3>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0444\u0430\u0439\u043b\u0430 \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f\u0434\u0440\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430. \u0415\u0451 \u0438\u043c\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c <code>getAPI_<\/code> + <code>moduleName<\/code> \u0438\u0437 JSON:<\/p>\n<pre><code>void *getAPI_ExampleModule(String subtype, String param) {\n    if (subtype == \"ExampleModule_A\") {\n        return new ExampleModule_A(param);\n    }\n    else if (subtype == \"ExampleModule_B\") {\n        return new ExampleModule_B(param);\n    }\n    else {\n        return nullptr;   \/\/ \u044d\u0442\u043e\u0442 subtype \u043d\u0435 \u043d\u0430\u0448\n    }\n}<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432), \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u0435 \u0438\u0445 \u0432\u0441\u0435 \u0447\u0435\u0440\u0435\u0437 <code>else if<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 <code>subtype<\/code> \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 <code>subtype<\/code> \u0432 <code>modinfo.json<\/code>.<\/p>\n\n<h2 id=\"iotm-mod-6\">6. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>\u0411\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u044f\u0434\u0440\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044e \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0438, \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445, \u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.<\/p>\n\n<h3>6.1. \u041a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044f (onModuleOrder)<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043a\u043d\u043e\u043f\u043a\u0430, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 <code>configItem<\/code> \u043f\u043e\u043b\u0435 <code>\"btn-\u0418\u043c\u044f\u041a\u043d\u043e\u043f\u043a\u0438\"<\/code>, \u0430 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435:<\/p>\n<pre><code>void onModuleOrder(String &amp;key, String &amp;value) {\n    if (key == \"Example\") {                 \/\/ \u0438\u043c\u044f \u0438\u0437 \"btn-Example\"\n        SerialPrint(\"i\", \"MyModule\", \"\u041d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430: \" + value);\n        \/\/ \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0443, \u0441\u0431\u0440\u043e\u0441 \u0438 \u0442. \u043f.\n    }\n}<\/code><\/pre>\n\n<h3>6.2. \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 (execute)<\/h3>\n<p>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0438 IoTManager \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435 <code>execute()<\/code> \u0438 \u043e\u043f\u0438\u0448\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0431\u043b\u043e\u043a\u0435 <code>funcInfo<\/code> \u0444\u0430\u0439\u043b\u0430 JSON:<\/p>\n<pre><code>IoTValue execute(String command, std::vector&lt;IoTValue&gt; &amp;param) {\n    if (command == \"myFunc\") {\n        if (param.size() &gt;= 1) {\n            String otherId = param[0].valS;\n            String v = getItemValue(otherId);   \/\/ \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f\n            \/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435\n        }\n    }\n    return {};   \/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\n}<\/code><\/pre>\n<p>\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0435 <code>param<\/code>; \u043a\u0430\u0436\u0434\u044b\u0439 \u2014 \u044d\u0442\u043e <code>IoTValue<\/code> \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 <code>valS<\/code> and <code>valD<\/code>. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>getItemValue(id)<\/code> \u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u043e \u0435\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443.<\/p>\n\n<h3>6.3. \u0421\u0432\u043e\u0439 loop() \u0438 \u043e\u0431\u0449\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439 \u043e\u043f\u0440\u043e\u0441 (\u043d\u0435 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0443), \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435 <code>loop()<\/code>. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0437\u043e\u0432\u0438\u0442\u0435 \u0432 \u043a\u043e\u043d\u0446\u0435 <code>IoTItem::loop()<\/code>, \u0438\u043d\u0430\u0447\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c <code>doByInterval()<\/code>:<\/p>\n<pre><code>void loop() {\n    adc = IoTgpio.analogRead(_pin);   \/\/ \u0432\u0430\u0448\u0430 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430\n    IoTItem::loop();                  \/\/ \u041e\u0411\u042f\u0417\u0410\u0422\u0415\u041b\u042c\u041d\u041e \u0432 \u043a\u043e\u043d\u0446\u0435\n}<\/code><\/pre>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0434\u0438\u043d \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (I2C, \u0448\u0438\u043d\u0443), \u0437\u0430\u0432\u0435\u0434\u0438\u0442\u0435 <b>\u043e\u0431\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/b> \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e-\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 (<code>instanceLibXX(pin)<\/code>). \u0412 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0443\u0434\u0430\u043b\u044f\u044e\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/p>\n\n<h2 id=\"iotm-mod-7\">7. \u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430: \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043d\u0443\u043b\u044f<\/h2>\n<p>\u0421\u043e\u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0451 \u0432\u043c\u0435\u0441\u0442\u0435. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u043e\u0441\u0432\u0435\u0449\u0451\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u0444\u043e\u0442\u043e\u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u0435, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u043c \u043a \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u043c\u0443 \u043f\u0438\u043d\u0443.<\/p>\n\n<h3>\u0428\u0430\u0433 1. \u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d<\/h3>\n<p>\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 <code>src\/modules\/sensors\/ExampleModule<\/code> \u0432 \u043d\u043e\u0432\u0443\u044e <code>src\/modules\/sensors\/LightSensor<\/code>. \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0439\u0442\u0435 \u0444\u0430\u0439\u043b <code>.cpp<\/code> \u0432 <code>LightSensor.cpp<\/code>.<\/p>\n\n<h3>\u0428\u0430\u0433 2. \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c modinfo.json<\/h3>\n<pre><code>{\n  \"menuSection\": \"sensors\",\n  \"configItem\": [{\n    \"name\": \"\u0414\u0430\u0442\u0447\u0438\u043a \u043e\u0441\u0432\u0435\u0449\u0451\u043d\u043d\u043e\u0441\u0442\u0438\",\n    \"type\": \"Reading\",\n    \"subtype\": \"LightSensor\",\n    \"id\": \"Light\",\n    \"widget\": \"anydataLux\",\n    \"page\": \"\u0421\u0435\u043d\u0441\u043e\u0440\u044b\",\n    \"descr\": \"\u041e\u0441\u0432\u0435\u0449\u0451\u043d\u043d\u043e\u0441\u0442\u044c\",\n    \"int\": 10,\n    \"pin\": \"34\",\n    \"round\": 1\n  }],\n  \"about\": {\n    \"authorName\": \"\u0412\u0430\u0448\u0435 \u0438\u043c\u044f\",\n    \"moduleName\": \"LightSensor\",\n    \"moduleVersion\": \"1.0\",\n    \"usedRam\": { \"esp32_4mb\": 5, \"esp8266_4mb\": 5 },\n    \"title\": \"\u0414\u0430\u0442\u0447\u0438\u043a \u0441\u0432\u0435\u0442\u0430\",\n    \"moduleDesc\": \"\u0427\u0438\u0442\u0430\u0435\u0442 \u0444\u043e\u0442\u043e\u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u043f\u0438\u043d\u0430\",\n    \"propInfo\": {\n      \"pin\": \"\u0410\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 GPIO\",\n      \"int\": \"\u0421\u0435\u043a\u0443\u043d\u0434 \u043c\u0435\u0436\u0434\u0443 \u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438\"\n    }\n  },\n  \"defActive\": false,\n  \"usedLibs\": { \"esp32*\": [], \"esp82*\": [] }\n}<\/code><\/pre>\n\n<h3>\u0428\u0430\u0433 3. \u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c LightSensor.cpp<\/h3>\n<pre><code>#include \"Global.h\"\n#include \"classes\/IoTItem.h\"\n\nextern IoTGpio IoTgpio;\n\nclass LightSensor : public IoTItem {\nprivate:\n    unsigned int _pin;\npublic:\n    LightSensor(String parameters) : IoTItem(parameters) {\n        _pin = jsonReadInt(parameters, \"pin\");\n    }\n    void doByInterval() {\n        int raw = IoTgpio.analogRead(_pin);   \/\/ 0..4095\n        value.valD = raw \/ 40.95;             \/\/ \u0433\u0440\u0443\u0431\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u044b\n        regEvent(value.valD, \"LightSensor\");\n    }\n    ~LightSensor() {};\n};\n\nvoid *getAPI_LightSensor(String subtype, String param) {\n    if (subtype == \"LightSensor\") {\n        return new LightSensor(param);\n    }\n    return nullptr;\n}<\/code><\/pre>\n\n<h3>\u0428\u0430\u0433 4. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442<\/h3>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u2014 \u043e\u043d \u043d\u0430\u0439\u0434\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442 \u0441\u043f\u0438\u0441\u043a\u0438:<\/p>\n<pre><code>python PrepareProject.py --update<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435 (<code>myProfile.json<\/code>) \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0431-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 \u0438 \u0441\u043d\u043e\u0432\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 <code>PrepareProject.py<\/code> \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>python PrepareProject.py -b esp32_4mb<\/code><\/pre>\n\n<h3>\u0428\u0430\u0433 5. \u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0448\u0438\u0442\u044c<\/h3>\n<p>\u0421\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 PlatformIO (\u043a\u043d\u043e\u043f\u043a\u0430 Upload \u0438\u043b\u0438 <code>pio run -t upload<\/code>). \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u043e\u0432\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.<\/p>\n\n<h3>7.1. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 PrepareProject.py \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb<\/h3>\n<p>\u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u00ab\u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f\u00bb:<\/p>\n<ol>\n  <li>\u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 <code>src\/modules\/<\/code> \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0432\u0441\u0435\u0445 <code>modinfo.json<\/code>.<\/li>\n  <li>\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 <b>\u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/b> \u0438 \u043f\u0443\u0442\u0438 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 <code>platformio.ini<\/code>.<\/li>\n  <li>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 <code>src\/modules\/API.cpp<\/code> \u2014 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 <code>getAPI_\u2026<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/li>\n  <li>\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 <code>data_svelte\/items.json<\/code> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043c\u0435\u043d\u044e \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.<\/li>\n<\/ol>\n<div class=\"iotm-callout green\"><b class=\"lbl\">\u041e\u0442\u0441\u044e\u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u043e:<\/b> \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 PrepareProject.py. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u044f\u0434\u0440\u043e \u043d\u0435 \u0443\u0437\u043d\u0430\u0435\u0442 \u043e \u0432\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 getAPI, \u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u0442\u0441\u044f.<\/div>\n\n<h2 id=\"iotm-mod-8\">8. \u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u0438 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438<\/h2>\n<h3>8.1. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439<\/h3>\n<ul>\n  <li>\u0418\u043c\u044f \u043f\u0430\u043f\u043a\u0438, \u0444\u0430\u0439\u043b\u0430 <code>.cpp<\/code> and <code>moduleName<\/code> \u2014 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u044b.<\/li>\n  <li>\u0418\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>getAPI_X<\/code> = <code>getAPI_<\/code> + <code>moduleName<\/code>.<\/li>\n  <li>\u041a\u0430\u0436\u0434\u044b\u0439 <code>subtype<\/code> \u0432 <code>modinfo.json<\/code> \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0438 \u0432\u0435\u0442\u043a\u0443 \u0432 <code>getAPI<\/code>.<\/li>\n  <li>\u0412 <code>doByInterval()<\/code> \u0435\u0441\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d <code>regEvent()<\/code>.<\/li>\n  <li>\u0412\u0441\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 <code>usedLibs<\/code>.<\/li>\n  <li>\u041d\u0435\u0442 <code>delay()<\/code> \u0438 \u0434\u043e\u043b\u0433\u0438\u0445 \u0446\u0438\u043a\u043b\u043e\u0432.<\/li>\n  <li>\u0417\u0430\u043f\u0443\u0449\u0435\u043d <code>PrepareProject.py<\/code> \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/li>\n<\/ul>\n\n<h3>8.2. \u0427\u0430\u0441\u0442\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/h3>\n<table>\n  <thead><tr><th>\u0421\u0438\u043c\u043f\u0442\u043e\u043c<\/th><th>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430<\/th><th>\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/th><\/tr><\/thead>\n  <tbody>\n    <tr><td>\u041c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 \u043c\u0435\u043d\u044e<\/td><td>\u043d\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d PrepareProject \/ defActive=false<\/td><td>\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442, \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c<\/td><\/tr>\n    <tr><td>\u041e\u0448\u0438\u0431\u043a\u0430 \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0438 getAPI<\/td><td>moduleName \u2260 \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/td><td>\u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0438\u043c\u0435\u043d\u0430 \u043a \u0435\u0434\u0438\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443<\/td><\/tr>\n    <tr><td>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 0 \/ \u043f\u0443\u0441\u0442\u043e\u0435<\/td><td>\u043d\u0435\u0442 regEvent \u0438\u043b\u0438 \u043d\u0435 \u0442\u043e\u0442 \u043f\u0438\u043d<\/td><td>\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c doByInterval \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 pin<\/td><\/tr>\n    <tr><td>\u0412\u0438\u0441\u043d\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438<\/td><td>delay \u0438\u043b\u0438 \u0434\u043e\u043b\u0433\u0438\u0439 \u0446\u0438\u043a\u043b \u0432 \u043c\u043e\u0434\u0443\u043b\u0435<\/td><td>\u0443\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438, \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u0442\u0430\u043a\u0442\u044b<\/td><\/tr>\n    <tr><td>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430<\/td><td>\u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0432 usedLibs<\/td><td>\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b<\/td><\/tr>\n    <tr><td>\u0421\u0442\u0430\u0440\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u043d\u044b \u043f\u0438\u043d\u0430<\/td><td>\u043e\u0431\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d<\/td><td>\u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<h2 id=\"iotm-mod-9\">9. \u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a<\/h2>\n<h3>9.1. \u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b IoTItem<\/h3>\n<table>\n  <thead><tr><th>\u041c\u0435\u0442\u043e\u0434<\/th><th>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/th><\/tr><\/thead>\n  <tbody>\n    <tr><td><code>regEvent(val, info)<\/code><\/td><td>\u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0447\u0438\u0441\u043b\u043e \u0438\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430)<\/td><\/tr>\n    <tr><td><code>getItemValue(id)<\/code><\/td><td>\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u043e id<\/td><\/tr>\n    <tr><td><code>findIoTItem(name)<\/code><\/td><td>\u043d\u0430\u0439\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f<\/td><\/tr>\n    <tr><td><code>isItemExist(name)<\/code><\/td><td>\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442<\/td><\/tr>\n    <tr><td><code>getID()<\/code><\/td><td>\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/td><\/tr>\n    <tr><td><code>getSubtype()<\/code><\/td><td>\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c subtype \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/td><\/tr>\n    <tr><td><code>setInterval(ms)<\/code><\/td><td>\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u043f\u0440\u043e\u0441\u0430<\/td><\/tr>\n    <tr><td><code>SerialPrint(\"i\", tag, msg)<\/code><\/td><td>\u0432\u044b\u0432\u043e\u0434 \u0432 \u043b\u043e\u0433\/\u043a\u043e\u043d\u0441\u043e\u043b\u044c<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<h3>9.2. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u043b\u0430\u0442\u044b (\u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0438)<\/h3>\n<p>\u0417\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>-b<\/code> \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 <code>PrepareProject.py<\/code>. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435:<\/p>\n<table>\n  <thead><tr><th>\u041f\u0440\u043e\u0444\u0438\u043b\u044c<\/th><th>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/th><\/tr><\/thead>\n  <tbody>\n    <tr><td><code>esp8266_4mb<\/code> \/ <code>esp8266_16mb<\/code><\/td><td>ESP8266 \u0441 4\/16 \u041c\u0411 \u0444\u043b\u0435\u0448<\/td><\/tr>\n    <tr><td><code>esp8266_1mb<\/code> \/ <code>esp8285_1mb<\/code><\/td><td>\u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0435 ESP8266\/8285<\/td><\/tr>\n    <tr><td><code>esp32_4mb<\/code> \/ <code>esp32_16mb<\/code><\/td><td>ESP32 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439<\/td><\/tr>\n    <tr><td><code>esp32cam_4mb<\/code><\/td><td>ESP32-CAM (\u0441 \u043a\u0430\u043c\u0435\u0440\u043e\u0439)<\/td><\/tr>\n    <tr><td><code>esp32s2_4mb<\/code> \/ <code>esp32c3m_4mb<\/code><\/td><td>ESP32-S2 \/ C3<\/td><\/tr>\n    <tr><td><code>esp32s3_16mb<\/code> \/ <code>esp32c6_4mb<\/code><\/td><td>ESP32-S3 \/ C6<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<h3>9.3. \u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b<\/h3>\n<ul>\n  <li>\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <a href=\"https:\/\/github.com\/IoTManagerProject\/IoTManager\" target=\"_blank\" rel=\"noopener\">github.com\/IoTManagerProject\/IoTManager<\/a><\/li>\n  <li>\u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u044b: \u043f\u0430\u043f\u043a\u0438 <code>src\/modules\/sensors\/<\/code> \u2014 \u0438\u0437\u0443\u0447\u0430\u0439\u0442\u0435 <code>Ntc<\/code>, <code>Ds18b20<\/code>, <code>AnalogAdc<\/code>.<\/li>\n  <li>\u0428\u0430\u0431\u043b\u043e\u043d-\u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430: <code>src\/modules\/sensors\/ExampleModule\/<\/code> \u2014 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d.<\/li>\n  <li>\u0423\u0447\u0435\u0431\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0438 JSON: \u043f\u0430\u043f\u043a\u0430 <code>training\/<\/code>.<\/li>\n<\/ul>\n<div class=\"iotm-callout\"><b class=\"lbl\">\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0441\u043e\u0432\u0435\u0442:<\/b> \u043b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Ntc) \u0440\u044f\u0434\u043e\u043c \u0441 ExampleModule \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c. \u041f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u043e\u0439 \u043d\u043e\u0432\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u2014 \u044d\u0442\u043e \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e.<\/div>\n\n<div class=\"iotm-foot\">\n  IoTManager \u2014 \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u00b7 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0432\u0435\u0442\u043a\u0438 <code>ver4stable<\/code><br>\n  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434: github.com\/IoTManagerProject\/IoTManager\n<\/div>\n\n<\/div>","protected":false},"excerpt":{"rendered":"<p>IoTManager \u00b7 \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u041a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u041f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u0412\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 1.0 \u00b7 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0432\u0435\u0442\u043a\u0438 ver4stable github.com\/IoTManagerProject\/IoTManager \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u041e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 (\u043a\u0440\u0430\u0442\u043a\u043e) \u0416\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043c\u043e\u0434\u0443\u043b\u044f \u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f: \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 \u0424\u0430\u0439\u043b .cpp \u2014 \u043a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430: \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043d\u0443\u043b\u044f \u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u0438 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a 1. \u041e &#8230; <a title=\"\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f 2 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f\" class=\"read-more\" href=\"https:\/\/iotmanager.org\/en\/instruct2\/\" aria-label=\"More on \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f 2 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f\">Read more<\/a><\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/iotmanager.org\/en\/wp-json\/wp\/v2\/pages\/1126"}],"collection":[{"href":"https:\/\/iotmanager.org\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/iotmanager.org\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/iotmanager.org\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iotmanager.org\/en\/wp-json\/wp\/v2\/comments?post=1126"}],"version-history":[{"count":2,"href":"https:\/\/iotmanager.org\/en\/wp-json\/wp\/v2\/pages\/1126\/revisions"}],"predecessor-version":[{"id":1144,"href":"https:\/\/iotmanager.org\/en\/wp-json\/wp\/v2\/pages\/1126\/revisions\/1144"}],"wp:attachment":[{"href":"https:\/\/iotmanager.org\/en\/wp-json\/wp\/v2\/media?parent=1126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}