{"id":301428,"date":"2020-04-07T15:00:38","date_gmt":"2020-04-07T15:00:38","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=301428"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=301428","title":{"rendered":"\u041f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043f\u043e\u0434 TI cc2530 \u043d\u0430 Z-Stack 3.0 \u0434\u043b\u044f Zigbee \u0440\u0435\u043b\u0435 Sonoff BASICZBR3 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c ds18b20"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/iobroker\/blog\/495926\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pk\/k8\/1r\/pkk81rmgifam0ccamhmapnesahq.jpeg\"><\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 C, \u0447\u0442\u043e-\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043e Zigbee, \u0447\u0438\u043f\u0435 cc2530, \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u0435\u0433\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u0430\u043a zigbee2mqtt. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u0438\u043b\u0438 \u0441\u0445\u043e\u0434\u0438\u0442\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 <a href=\"https:\/\/myzigbee.ru\/\">https:\/\/myzigbee.ru<\/a> \u0438 <a href=\"https:\/\/www.zigbee2mqtt.io\/\">https:\/\/www.zigbee2mqtt.io\/<\/a><br \/>  \u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u043f\u0435\u0440\u0432\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e, \u043d\u043e \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0438 \u0443\u0436\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0435\u0442\u0430\u043b\u044f\u0445, \u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0438\u0445.<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 <a href=\"https:\/\/github.com\/diyruz\/diyruz_rt\">github.com\/diyruz\/diyruz_rt<\/a><br \/>  \u041a\u043e\u0434 \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u201c\u042f \u043d\u0435 \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u0438\u043a, \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0447\u0443\u0441\u044c.\u201d<\/p>\n<h1>\u0426\u0435\u043b\u044c<\/h1>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u2014 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u043e\u0434 Z-Stack, \u0434\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u0435\u043b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043f\u043e\u0434 \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 (\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u0440\u0435\u043b\u0435 <a href=\"https:\/\/www.itead.cc\/sonoff-basiczbr3.html\">Sonoff BASICZBR3<\/a>) \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b ds18b20.<\/p>\n<p>  \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c Zigbee-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u043e\u0434 \u0447\u0438\u043f TI cc2530 \u043d\u0430 Z-Stack.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h1>1. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h1>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"https:\/\/www.ti.com\/tool\/Z-STACK\">Z-Stack 3.0.2<\/a> \u2014 \u044d\u0442\u043e SDK \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"https:\/\/www.iar.com\/iar-embedded-workbench#!?architecture=8051\">IAR Embeded Workbench for 8051<\/a> \u2014 \u044d\u0442\u043e \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 \u0447\u0438\u043f\u044b TI cc2530. \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u2014 1 \u043c\u0435\u0441\u044f\u0446 (\u043d\u043e \u0438\u0449\u0443\u0449\u0438\u0439 \u043d\u0430\u0439\u0434\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435).<br \/>  \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e CCDebugger \u2014 \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c \u0447\u0438\u043f\u044b cc2531\/cc2530, \u043d\u043e \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u0440\u0435\u0434\u0435 IAR.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_j\/aj\/pr\/_jajpr3cvn5q93lo6_igpenpdly.jpeg\"><br \/>  \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432, \u043c\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u044f \u0434\u0435\u043b\u0430\u044e \u043d\u0430 devboard \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u0435 cc2530:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ql\/xc\/cq\/qlxccqkdbxnqt3pcuo8049lj0ci.jpeg\"><\/p>\n<h1>2. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h1>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0431\u0430\u0437\u0430 GenericApp. \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Z-Stack. \u0420\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u043e \u0432 \u043f\u0430\u043f\u043a\u0435 Z-Stack 3.0.2\\Projects\\zstack\\HomeAutomation\\GenericApp.<br \/>  \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0440\u044f\u0434\u043e\u043c \u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 DIYRuZRT (\u0442\u0430\u043a \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430).<br \/>  \u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 CC2530DB \u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b\u044b:  <\/p>\n<ul>\n<li>GenericApp.ewd \u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f C-SPY<\/li>\n<li>GenericApp.ewp \u2014 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/li>\n<li>GenericApp.eww \u2014 \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c Workspace<\/li>\n<\/ul>\n<p>  \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b\u044b \u0432 DIYRuZRT.eww \u0438 DIYRuZRT.ewp.<br \/>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0432 \u043f\u0430\u043f\u043a\u0435 Source) \u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f GenericApp \u043d\u0430 DIYRuZRT.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 DIYRuZRT.ewp \u0432 IAR. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e RouterEB \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c Rebuild All.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/fb\/re\/mb\/fbremb-ma8rcyafhwdcj6klys9k.png\"><\/p>\n<p>  \u0412 \u043f\u0430\u043f\u043a\u0435 CC2530DB \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u043f\u0430\u043f\u043a\u0430 RouterEB, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438, \u0432 \u043f\u0430\u043f\u043a\u0435 EXE, \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b DIYRuZRT.d51 \u2014 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438\u0437 IAR.<br \/>  \u041d\u043e \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 SmartRF Flash Programmer, \u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 Link \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Output \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Output file \u0438 Format:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/r5\/cb\/xl\/r5cbxlrunrutiwxxgt-gytlwjz4.png\"><br \/>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0430\u043f\u043a\u0435 EXE \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 DIYRuZRT.hex \u0443\u0434\u043e\u0431\u043d\u044b\u0439 <a href=\"https:\/\/myzigbee.ru\/books\/%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8\/page\/%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B0-cc2531cc2530\">\u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438<\/a>.<br \/>  \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0441\u0435\u0442\u0438. \u0427\u0442\u043e \u0436, \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h1>3. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438<\/h1>\n<p>  \u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Zigbee \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f:  <\/p>\n<ul>\n<li><b>Endpoint (\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442)<\/b> \u2014 \u0442\u043e\u0447\u043a\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u0432 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043e\u0434\u0438\u043d \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442. \u0412 \u043c\u043d\u043e\u0433\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u2014 \u043e\u0434\u0438\u043d \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442).  <\/li>\n<li><b>Cluster (\u043a\u043b\u0430\u0441\u0442\u0435\u0440)<\/b> \u2014 \u043d\u0430\u0431\u043e\u0440 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u0435\u0434\u0438\u043d\u043e\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443 (\u0432\u043a\u043b\/\u0432\u044b\u043a\u043b, \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0438 \u0442.\u043f.). \u041a\u043b\u0430\u0441\u0442\u0435\u0440 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0435 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u043c. \u0412 \u043e\u0434\u043d\u043e\u043c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432, \u043d\u043e \u043d\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445.  <\/li>\n<li><b>Attribute (\u0430\u0442\u0440\u0438\u0431\u0443\u0442)<\/b> \u2014 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c. \u0412 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.  <\/li>\n<li><b>Command (\u043a\u043e\u043c\u0430\u043d\u0434\u0430)<\/b> \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u0423 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.  <\/li>\n<\/ul>\n<p>  \u0412\u0438\u0434\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u043a\u043e\u043c\u0430\u043d\u0434 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 Zigbee Cluster Library. \u041d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b, \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438.<br \/>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0440\u0435-\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043d\u0430\u043f\u043b\u0435\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0447\u0442\u043e-\u0442\u043e \u043e\u043a\u043e\u043b\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430. \u041f\u043e\u0442\u043e\u043c \u043f\u043e\u0434 \u043d\u0438\u0445 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 <a href=\"https:\/\/processors.wiki.ti.com\/images\/a\/a9\/06_-_OSAL_and_HAL.pdf\">Z-Stack \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f<\/a>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<ul>\n<li><b>OSAL (Operating System Abstraction Layer)<\/b> \u2014 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 (tasks), \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 (messages), \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 (events), \u0442\u0430\u0439\u043c\u0435\u0440\u0430\u043c\u0438 (timers) \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/li>\n<li><b>HAL (Hardware Abstraction Layer)<\/b> \u2014 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 (keys), \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438 (leds), \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438 (Interrupt) \u0438 \u0442.\u043f.<\/li>\n<\/ul>\n<p>  \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u0432\u0430\u0441 \u0436\u0434\u0435\u0442 \u043d\u0438\u0436\u0435 \u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a.<\/p>\n<h1>4. \u0427\u0442\u043e \u0436\u0435 \u0443 \u043d\u0430\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f?<\/h1>\n<p>  \u041a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 \u043f\u0430\u043f\u043a\u0435 Source:  <\/p>\n<ul>\n<li><i>OSAL_DIYRuZRT.c<\/i> \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435  <\/li>\n<li><i>zcl_DIYRuZRT.h<\/i> \u2014 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b  <\/li>\n<li><i>zcl_DIYRuZRT.c<\/i> \u2014 \u0444\u0430\u0439\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439  <\/li>\n<li><i>zcl_DIYRuZRT_data.c<\/i> \u2014 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440  <\/li>\n<\/ul>\n<p>  <i>OSAL_DIYRuZRT.c<\/i> \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0437\u0430\u0434\u0430\u0447 (task)\u00a0<b>pTaskEventHandlerFn tasksArr<\/b> \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0445 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <b>osalInitTasks<\/b>.<br \/>  \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432.<\/p>\n<p>  \u0421\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0437\u0430\u0434\u0430\u0447 <b>pTaskEventHandlerFn tasksAr<\/b>r \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0427\u0430\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f\/\u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<br \/>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0432 \u043e\u043f\u0446\u0438\u044f\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 Defined symbols:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pn\/tl\/u6\/pntlu6bioazjsoaywmdfofeloas.png\">  <\/p>\n<pre><code class=\"cpp\">const pTaskEventHandlerFn tasksArr[] = {   macEventLoop,   nwk_event_loop, #if !defined (DISABLE_GREENPOWER_BASIC_PROXY) &amp;&amp; (ZG_BUILD_RTR_TYPE)   gp_event_loop, #endif     Hal_ProcessEvent, #if defined( MT_TASK )   MT_ProcessEvent, #endif   APS_event_loop, #if defined ( ZIGBEE_FRAGMENTATION )   APSF_ProcessEvent, #endif   ZDApp_event_loop, #if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )   ZDNwkMgr_event_loop, #endif   \/\/Added to include TouchLink functionality   #if defined ( INTER_PAN )     StubAPS_ProcessEvent,   #endif   \/\/ Added to include TouchLink initiator functionality   #if defined ( BDB_TL_INITIATOR )     touchLinkInitiator_event_loop,   #endif   \/\/ Added to include TouchLink target functionality   #if defined ( BDB_TL_TARGET )     touchLinkTarget_event_loop,   #endif   zcl_event_loop,   bdb_event_loop,   zclDIYRuZRT_event_loop }; <\/code><\/pre>\n<p>  <b>osalInitTasks <\/b> \u2014 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c.<br \/>  \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443, \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440. \u0412\u0430\u0436\u043d\u043e \u0441\u043e\u0431\u043b\u044e\u0441\u0442\u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0447\u0442\u043e \u0438 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 <b>tasksArr<\/b>, \u0442.\u043a. \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0437\u0430\u0434\u0430\u0447\u0438.  <\/p>\n<pre><code class=\"cpp\">void osalInitTasks( void ) {   uint8 taskID = 0;    tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);   osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));    macTaskInit( taskID++ );   nwk_init( taskID++ ); #if !defined (DISABLE_GREENPOWER_BASIC_PROXY) &amp;&amp; (ZG_BUILD_RTR_TYPE)   gp_Init( taskID++ ); #endif   Hal_Init( taskID++ ); #if defined( MT_TASK )   MT_TaskInit( taskID++ ); #endif   APS_Init( taskID++ ); #if defined ( ZIGBEE_FRAGMENTATION )   APSF_Init( taskID++ ); #endif   ZDApp_Init( taskID++ ); #if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )   ZDNwkMgr_Init( taskID++ ); #endif   \/\/ Added to include TouchLink functionality #if defined ( INTER_PAN )   StubAPS_Init( taskID++ ); #endif \/\/ Added to include TouchLink initiator functionality #if defined( BDB_TL_INITIATOR )   touchLinkInitiator_Init( taskID++ ); #endif \/\/ Added to include TouchLink target functionality #if defined ( BDB_TL_TARGET )   touchLinkTarget_Init( taskID++ ); #endif   zcl_Init( taskID++ );   bdb_Init( taskID++ );   zclDIYRuZRT_Init( taskID ); } <\/code><\/pre>\n<p>  \u041d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a <b>zclDIYRuZRT_event_loop <\/b>\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <b>zclDIYRuZRT_Init<\/b>. \u041e\u043d\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443.<br \/>  \u042d\u0442\u043e \u0434\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <i>zcl_DIYRuZRT.c<\/i>.<\/p>\n<p>  <b>zclDIYRuZRT_Init <\/b> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438.<br \/>  <b>DIYRuZRT_ENDPOINT <\/b> \u2014 \u043d\u043e\u043c\u0435\u0440 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043d\u0430\u0448\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0448\u0430\u0433\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:  <\/p>\n<ul>\n<li><b>bdb_RegisterSimpleDescriptor <\/b> \u2014 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <b>SimpleDescriptionFormat_t zclDIYRuZRT_SimpleDesc<\/b> \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442, \u0435\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044c, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b. \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <i>OSAL_DIYRuZRT_data.c<\/i>  <\/li>\n<li><b>zclGeneral_RegisterCmdCallbacks <\/b> \u2014 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 <b>zclGeneral_AppCallbacks_t zclDIYRuZRT_CmdCallbacks<\/b> \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0433\u0434\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.  <\/li>\n<li><b>zcl_registerAttrList <\/b> \u2014 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 <b>zclAttrRec_t zclDIYRuZRT_Attrs<\/b> \u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440.  <\/li>\n<li><b>zcl_registerForMsg <\/b> \u2014 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.  <\/li>\n<li><b>RegisterForKeys <\/b> \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a.  <\/li>\n<\/ul>\n<pre><code class=\"cpp\">\/*********************************************************************  * SIMPLE DESCRIPTOR  *\/ \/\/ This is the Cluster ID List and should be filled with Application \/\/ specific cluster IDs. const cId_t zclDIYRuZRT_InClusterList[] = {   ZCL_CLUSTER_ID_GEN_BASIC,   ZCL_CLUSTER_ID_GEN_IDENTIFY,      \/\/ DIYRuZRT_TODO: Add application specific Input Clusters Here.    \/\/       See zcl.h for Cluster ID definitions    }; #define ZCLDIYRuZRT_MAX_INCLUSTERS   (sizeof(zclDIYRuZRT_InClusterList) \/ sizeof(zclDIYRuZRT_InClusterList[0]))   const cId_t zclDIYRuZRT_OutClusterList[] = {   ZCL_CLUSTER_ID_GEN_BASIC,      \/\/ DIYRuZRT_TODO: Add application specific Output Clusters Here.    \/\/       See zcl.h for Cluster ID definitions }; #define ZCLDIYRuZRT_MAX_OUTCLUSTERS  (sizeof(zclDIYRuZRT_OutClusterList) \/ sizeof(zclDIYRuZRT_OutClusterList[0]))   SimpleDescriptionFormat_t zclDIYRuZRT_SimpleDesc = {   DIYRuZRT_ENDPOINT,                  \/\/  int Endpoint;   ZCL_HA_PROFILE_ID,                     \/\/  uint16 AppProfId;   \/\/ DIYRuZRT_TODO: Replace ZCL_HA_DEVICEID_ON_OFF_LIGHT with application specific device ID   ZCL_HA_DEVICEID_ON_OFF_LIGHT,          \/\/  uint16 AppDeviceId;    DIYRuZRT_DEVICE_VERSION,            \/\/  int   AppDevVer:4;   DIYRuZRT_FLAGS,                     \/\/  int   AppFlags:4;   ZCLDIYRuZRT_MAX_INCLUSTERS,         \/\/  byte  AppNumInClusters;   (cId_t *)zclDIYRuZRT_InClusterList, \/\/  byte *pAppInClusterList;   ZCLDIYRuZRT_MAX_OUTCLUSTERS,        \/\/  byte  AppNumInClusters;   (cId_t *)zclDIYRuZRT_OutClusterList \/\/  byte *pAppInClusterList; }; <\/code><\/pre>\n<p>  <b>zclDIYRuZRT_event_loop <\/b> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<br \/>  \u0421\u043f\u0435\u0440\u0432\u0430 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f:  <\/p>\n<ul>\n<li><b>ZCL_INCOMING_MSG <\/b> \u2014 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 zclDIYRuZRT_ProcessIncomingMsg.  <\/li>\n<li><b>KEY_CHANGE <\/b> \u2014 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 <b>zclDIYRuZRT_HandleKeys<\/b>.  <\/li>\n<li><b>ZDO_STATE_CHANGE <\/b> \u2014 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0435\u0442\u0438.  <\/li>\n<\/ul>\n<pre><code class=\"cpp\">  if ( events &amp; SYS_EVENT_MSG )   {     while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( zclDIYRuZRT_TaskID )) )     {       switch ( MSGpkt-&gt;hdr.event )       {         case ZCL_INCOMING_MSG:           \/\/ Incoming ZCL Foundation command\/response messages           zclDIYRuZRT_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt );           break;          case KEY_CHANGE:           zclDIYRuZRT_HandleKeys( ((keyChange_t *)MSGpkt)-&gt;state, ((keyChange_t *)MSGpkt)-&gt;keys );           break;          case ZDO_STATE_CHANGE:           zclDIYRuZRT_NwkState = (devStates_t)(MSGpkt-&gt;hdr.status);            \/\/ now on the network           if ( (zclDIYRuZRT_NwkState == DEV_ZB_COORD) ||                (zclDIYRuZRT_NwkState == DEV_ROUTER)   ||                (zclDIYRuZRT_NwkState == DEV_END_DEVICE) )           {             giGenAppScreenMode = GENERIC_MAINMODE;             zclDIYRuZRT_LcdDisplayUpdate();           }           break;          default:           break;       }        \/\/ Release the memory       osal_msg_deallocate( (uint8 *)MSGpkt );     } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f <b>DIYRuZRT_EVT_1<\/b>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 <b>HAL_LED_2 <\/b>\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u0430\u0439\u043c\u0435\u0440 \u043d\u0430 500\u043c \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435\u043c. \u0422\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043c\u0438\u0433\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 <b>HAL_LED_2<\/b>.<\/p>\n<pre><code class=\"cpp\">  if ( events &amp; DIYRuZRT_EVT_1 )   {     \/\/ toggle LED 2 state, start another timer for 500ms     HalLedSet ( HAL_LED_2, HAL_LED_MODE_TOGGLE );     osal_start_timerEx( zclDIYRuZRT_TaskID, DIYRuZRT_EVT_1, 500 );          return ( events ^ DIYRuZRT_EVT_1 );   } <\/code><\/pre>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <b>HAL_KEY_SW_1 <\/b>\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f <b>DIYRuZRT_EVT_1<\/b>. \u0418 \u0435\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 S2, \u0442\u043e \u043c\u0438\u0433\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f (\u0443 \u043c\u0435\u043d\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c). \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u043c\u0438\u0433\u0430\u043d\u0438\u0435.<\/p>\n<h1>5. HAL: \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u0438 \u043a\u043d\u043e\u043f\u043a\u0438<\/h1>\n<p>  \u00ab\u041f\u043e\u0433\u043e\u0434\u0438\u0442\u0435, \u043a\u0430\u043a\u043e\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0438 \u043a\u043d\u043e\u043f\u043a\u0438?\u00bb, \u2014 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432 Z-stack \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u044b \u0441\u0435\u0440\u0438\u0438 SmartRF05 EB:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/tz\/bl\/ru\/tzblrurrrpoze3kghx_dd1zrume.png\"><br \/>  \u0423 \u043c\u0435\u043d\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u0447\u0438\u043f\u043e\u043c.<\/p>\n<p>  \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0435\u0441\u0442\u044c 2 \u043a\u043d\u043e\u043f\u043a\u0438 (+ \u0440\u0435\u0441\u0435\u0442) \u0438 3 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 (+ \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0438\u0442\u0430\u043d\u0438\u044f). \u0412\u043e\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 (D2) \u043c\u0438\u0433\u0430\u0435\u0442 \u043f\u0440\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.<br \/>  \u041f\u0440\u043e\u0437\u0432\u043e\u043d\u0438\u0432 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0438\u043d\u043e\u0432, \u0434\u0438\u043e\u0434\u043e\u0432 \u0438 \u043a\u043d\u043e\u043f\u043e\u043a:  <\/p>\n<ul>\n<li>D1 \u2014 P10<\/li>\n<li>D2 \u2014 P11<\/li>\n<li>D3 \u2014 P14<\/li>\n<li>S2 \u2014 P20<\/li>\n<li>S1 \u2014 P01<\/li>\n<\/ul>\n<p>  \u0422\u0430\u043a \u0432\u043e\u0442, HAL \u2014 \u044d\u0442\u043e <b>Hardware Abstraction Layer<\/b>, \u0441\u043f\u043e\u0441\u043e\u0431 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u0442\u0438\u043f\u0430 <i>\u041a\u043d\u043e\u043f\u043a\u0430 1<\/i> \u0438\u043b\u0438 <i>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 2<\/i>, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0447\u0442\u043e \u0437\u0430 <b>HAL_LED_2 <\/b>\u0438 \u043a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u043f\u0438\u043d \u043e\u043d \u043f\u043e\u0434\u0432\u0435\u0448\u0435\u043d.<br \/>  \u041f\u043e\u0438\u0441\u043a\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0444\u0430\u0439\u043b <i>hal_led.h<\/i>, \u0433\u0434\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u044d\u0442\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>HalLedSet<\/b>, \u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u0438 \u0440\u0435\u0436\u0438\u043c. \u0412\u043d\u0443\u0442\u0440\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>HalLedOnOff <\/b>\u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043b\u0438\u0431\u043e <b>HAL_TURN_ON_LED2 <\/b>\u043b\u0438\u0431\u043e <b>HAL_TURN_OFF_LED2<\/b>.<\/p>\n<p>  <b>HAL_TURN_ON_LED2 <\/b>\u0438 <b>HAL_TURN_OFF_LED2 <\/b> \u2014 \u044d\u0442\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 <i>hal_board_cfg.h<\/i>. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f.<br \/>  \u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435:  <\/p>\n<pre><code class=\"cpp\">#define HAL_TURN_OFF_LED2() \u00a0 \u00a0 \u00a0 st( LED2_SBIT = LED2_POLARITY (0); ) #define HAL_TURN_ON_LED2()\u00a0 \u00a0 \u00a0 \u00a0 st( LED2_SBIT = LED2_POLARITY (1); ) <\/code><\/pre>\n<p>  \u0427\u0443\u0442\u044c \u0432\u044b\u0448\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f <b>LED2_SBIT <\/b>\u0438 <b>LED2_POLARITY<\/b>:  <\/p>\n<pre><code class=\"cpp\">\u00a0\u00a0\/* 2 - Red *\/ \u00a0\u00a0#define LED2_BV \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 BV(1) \u00a0\u00a0#define LED2_SBIT \u00a0 \u00a0 \u00a0 \u00a0 P1_1 \u00a0\u00a0#define LED2_DDR\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 P1DIR \u00a0\u00a0#define LED2_POLARITY \u00a0 \u00a0 ACTIVE_HIGH <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 2 \u0443 \u043d\u0430\u0441 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0438\u043d\u0435 <b>P1_1<\/b> \u0438 \u0435\u0433\u043e \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u2014 \u0432\u044b\u0441\u043e\u043a\u0438\u0439. \u041d\u043e, \u0441\u0443\u0434\u044f \u043f\u043e \u043a\u043e\u0434\u0443, \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u043f\u043e\u0433\u0430\u0441\u043d\u0443\u0442\u044c \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443, \u0430 \u0443 \u043d\u0430\u0441 \u043e\u043d \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0433\u043e\u0440\u0435\u0442\u044c. \u0415\u0441\u043b\u0438 \u0432 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <i>hal_board_cfg.h <\/i>\u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c:  <\/p>\n<pre><code class=\"cpp\">#define LED2_POLARITY \u00a0 \u00a0 ACTIVE_HIGH<\/code><\/pre>\n<p>  \u043d\u0430  <\/p>\n<pre><code class=\"cpp\">#define LED2_POLARITY \u00a0 \u00a0 ACTIVE_LOW<\/code><\/pre>\n<p>  \u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0433\u0430\u0441\u043d\u0435\u0442 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 S2, \u043a\u0430\u043a \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u043e\u0431\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b, \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u043b\u0443\u0447\u0448\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043d\u0430\u0447\u0435:  <\/p>\n<ul>\n<li>\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043f\u0438\u044e \u0444\u0430\u0439\u043b\u0430 <i>hal_board_cfg.h<\/i> (\u0438\u0437 \u043f\u0430\u043f\u043a\u0438 Z-Stack 3.0.2\\Components\\hal\\target\\CC2530EB\\) \u0432 \u043d\u0430\u0448\u0443 \u043f\u0430\u043f\u043a\u0443 Source \u0438 \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <i>hal_board_cfg_DIYRuZRT.h<\/i>  <\/li>\n<li>\u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u043a\u043e\u043f\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0441\u0430\u043c\u0430\u044f \u043f\u0435\u0440\u0432\u0430\u044f (\u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430). \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u0430\u043f\u043a\u0435 Source \u0444\u0430\u0439\u043b <i>preinclude.h<\/i> \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0442\u0443\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0443:  <\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"cpp\">#include &quot;hal_board_cfg_DIYRuZRT.h&quot;<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u0443\u043a\u0430\u0436\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441\u0430\u043c\u044b\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u2014 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:  <\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"cpp\">$PROJ_DIR$\\..\\Source\\preinclude.h<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jl\/_f\/j_\/jl_fj_oy71xhwehgszprw9jhdiw.png\"><br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043d\u0430\u0448\u0435\u043c \u0444\u0430\u0439\u043b\u0435 <i>hal_board_cfg_DIYRuZRT.h<\/i> \u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 <i>preinclude.h<\/i> \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0442 \u0436\u0435 \u0444\u0430\u0439\u043b preinclude.h \u044f \u043f\u0435\u0440\u0435\u043d\u0435\u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u0443\u0434\u0430\u043b\u0438\u043b \u0438\u0445 \u0432 Options \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430:  <\/p>\n<pre><code class=\"cpp\">#define SECURE 1 #define TC_LINKKEY_JOIN #define NV_INIT #define NV_RESTORE #define xZTOOL_P1 #define xMT_TASK #define xMT_APP_FUNC #define xMT_SYS_FUNC #define xMT_ZDO_FUNC #define xMT_ZDO_MGMT #define xMT_APP_CNF_FUNC #define LEGACY_LCD_DEBUG #define LCD_SUPPORTED DEBUG #define MULTICAST_ENABLED FALSE #define ZCL_READ #define ZCL_WRITE #define ZCL_BASIC #define ZCL_IDENTIFY #define ZCL_SCENES #define ZCL_GROUPS <\/code><\/pre>\n<p>  \u0412 \u0442\u043e\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u0435 <i>hal_board_cfg_DIYRuZRT.h <\/i>\u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 S1 \u0438 Joystick Center Press:  <\/p>\n<pre><code class=\"cpp\">\/* S1 *\/ #define PUSH1_BV\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 BV(1) #define PUSH1_SBIT\u00a0 \u00a0 \u00a0 \u00a0 P0_1  \/* Joystick Center Press *\/ #define PUSH2_BV\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 BV(0) #define PUSH2_SBIT\u00a0 \u00a0 \u00a0 \u00a0 P2_0 #define PUSH2_POLARITY\u00a0 \u00a0 ACTIVE_HIGH <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0438\u043d\u0430\u043c \u043a\u043d\u043e\u043f\u043e\u043a \u043d\u0430 \u043f\u043b\u0430\u0442\u0435.<br \/>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u043c\u0430\u043a\u0440\u043e\u0441 <b>HAL_BOARD_INIT <\/b>\u0432 \u044d\u0442\u043e\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u0435. \u041f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <b>HAL_BOARD_CC2530EB_REV17<\/b>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u0430\u043a\u0440\u043e\u0441\u0430.  <\/p>\n<pre><code class=\"cpp\">\/* ----------- Board Initialization ---------- *\/ #if defined (HAL_BOARD_CC2530EB_REV17) &amp;&amp; !defined (HAL_PA_LNA) &amp;&amp; \\     !defined (HAL_PA_LNA_CC2590) &amp;&amp; !defined (HAL_PA_LNA_SE2431L) &amp;&amp; \\     !defined (HAL_PA_LNA_CC2592)  #define HAL_BOARD_INIT()                                         \\ {                                                                \\   uint16 i;                                                      \\                                                                  \\   SLEEPCMD &amp;= ~OSC_PD;                       \/* turn on 16MHz RC and 32MHz XOSC *\/                \\   while (!(SLEEPSTA &amp; XOSC_STB));            \/* wait for 32MHz XOSC stable *\/                     \\   asm(&quot;NOP&quot;);                                \/* chip bug workaround *\/                            \\   for (i=0; i&lt;504; i++) asm(&quot;NOP&quot;);          \/* Require 63us delay for all revs *\/                \\   CLKCONCMD = (CLKCONCMD_32MHZ | OSC_32KHZ); \/* Select 32MHz XOSC and the source for 32K clock *\/ \\   while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ)); \/* Wait for the change to be effective *\/   \\   SLEEPCMD |= OSC_PD;                        \/* turn off 16MHz RC *\/                              \\                                                                  \\   \/* Turn on cache prefetch mode *\/                              \\   PREFETCH_ENABLE();                                             \\                                                                  \\   HAL_TURN_OFF_LED1();                                           \\   LED1_DDR |= LED1_BV;                                           \\   HAL_TURN_OFF_LED2();                                           \\   LED2_DDR |= LED2_BV;                                           \\   HAL_TURN_OFF_LED3();                                           \\   LED3_DDR |= LED3_BV;                                           \\   HAL_TURN_OFF_LED4();                                           \\   LED4_SET_DIR();                                                \\                                                                  \\   \/* configure tristates *\/                                      \\   P0INP |= PUSH2_BV;                                             \\ } <\/code><\/pre>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<br \/>  \u0412\u043c\u0435\u0441\u0442\u043e <b>LED2_DDR <\/b>\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d <b>P1DIR <\/b> \u2014 \u044d\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u043e\u0440\u0442\u0430 <b>P1 <\/b>, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0438\u043d\u043e\u0432 (\u0432\u0445\u043e\u0434 \u0438\u043b\u0438 \u0432\u044b\u0445\u043e\u0434). \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e <b>LED2_BV <\/b> \u2014 \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 1 \u0432 \u0431\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0438\u043d\u0430 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 1\u0439 \u0431\u0438\u0442, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0438\u043d\u0443 <b>P1_1<\/b>):<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qr\/ed\/0y\/qred0ypxdrfxxkaleymbpqmjgto.png\"><br \/>  \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u0440\u0435\u0436\u0438\u043c\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<br \/>  <a href=\"http:\/\/www.ti.com\/lit\/ug\/swru191f\/swru191f.pdf\">\u00abcc253x User&#8217;s Guide\u00bb<\/a><\/p>\n<p>  \u041d\u043e \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0438. \u041a\u043d\u043e\u043f\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u2014 <i>hal_key.c<\/i>. \u0412 \u043d\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>HalKeyInit<\/b>, <b>HalKeyConfig<\/b>, <b>HalKeyRead<\/b>, <b>HalKeyPoll<\/b>. \u042d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<br \/>  \u041f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043d\u043e\u043f\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443, \u043a\u0430\u0436\u0434\u044b\u0435 100\u043c\u0441. \u041f\u0438\u043d P2_0 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u043d\u0430 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a \u0438 \u0435\u0433\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u0439\u043c\u0435\u0440 \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c.<\/p>\n<h1>6. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0434 \u0441\u0435\u0431\u044f<\/h1>\n<p>  \u041f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 <i>zcl_DIYRuZRT.h<\/i>:  <\/p>\n<ul>\n<li>DIYRuZRT_ENDPOINT \u043d\u0430 1<\/li>\n<\/ul>\n<p>  \u0432 \u0444\u0430\u0439\u043b\u0435 <i>OSAL_DIYRuZRT_data.c<\/i>:  <\/p>\n<ul>\n<li>DIYRuZRT_DEVICE_VERSION \u043d\u0430 1<\/li>\n<li>zclDIYRuZRT_ManufacturerName \u043d\u0430 { 6, &#8216;D&#8217;,&#8217;I&#8217;,&#8217;Y&#8217;,&#8217;R&#8217;,&#8217;u&#8217;,&#8217;Z&#8217; }<\/li>\n<li>zclDIYRuZRT_ModelId \u043d\u0430 { 9, &#8216;D&#8217;,&#8217;I&#8217;,&#8217;Y&#8217;,&#8217;R&#8217;,&#8217;u&#8217;,&#8217;Z&#8217;,&#8217;_&#8217;,&#8217;R&#8217;,&#8217;T&#8217; }<\/li>\n<li>zclDIYRuZRT_DateCode \u043d\u0430 { 8, &#8216;2&#8217;,&#8217;0&#8242;,&#8217;2&#8242;,&#8217;0&#8242;,&#8217;0&#8242;,&#8217;4&#8242;,&#8217;0&#8242;,&#8217;5&#8242; }<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u043e\u0433\u043b\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0442\u0438 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u043a\u0430\u043d\u0430\u043b\u0435 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 11, \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 <b>DEFAULT_CHANLIST<\/b> \u0432 \u0444\u0430\u0439\u043b\u0435 <i>Tools\\f8wConfig.cfg<\/i>), \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u044d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 <i>preinclude.h<\/i> \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b.<br \/>  \u0415\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <b>DISABLE_GREENPOWER_BASIC_PROXY<\/b>, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 GREENPOWER.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0435\u043d\u0443\u0436\u043d\u0443\u044e \u043d\u0430\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 LCD \u044d\u043a\u0440\u0430\u043d\u0430.  <\/p>\n<pre><code class=\"cpp\">\/\/#define LCD_SUPPORTED DEBUG #define DISABLE_GREENPOWER_BASIC_PROXY #define DEFAULT_CHANLIST 0x07FFF800\u00a0 \/\/ ALL Channels <\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u044b\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0442\u0438, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>zclDIYRuZRT_Init <\/b>\u0437\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0442\u0438.  <\/p>\n<pre><code class=\"cpp\">bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0BDB_COMMISSIONING_MODE_FINDING_BINDING); <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c Build, \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0432 \u0447\u0438\u043f \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043f\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440\u0435. \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u0440\u0430\u0431\u043e\u0442\u0443 Zigbee-\u0441\u0435\u0442\u0438 \u0432 ioBroker.zigbee, \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/um\/ik\/ss\/umikss4n4f19icobraxj-rb_tj4.png\"><br \/>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e!<\/p>\n<h1>7. \u0423\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/h1>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b:  <\/p>\n<ul>\n<li>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a \u0441\u0435\u0442\u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u043e \u0434\u043e\u043b\u0433\u043e\u043c\u0443 \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443.  <\/li>\n<li>\u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0432 \u0441\u0435\u0442\u0438, \u0442\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u0438\u0437 \u0441\u0435\u0442\u0438.  <\/li>\n<li>\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430.  <\/li>\n<li>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f.  <\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043d\u043e\u043f\u043e\u043a \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>DIYRuZRT_HalKeyInit <\/b>\u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 <i>hal_key.c<\/i>, \u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043d\u043e\u043f\u043e\u043a.  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043d\u043e\u043f\u043e\u043a (\u0432\u0445\u043e\u0434\u043e\u0432) void DIYRuZRT_HalKeyInit( void ) {   \/* \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a \u0432 0 *\/   halKeySavedKeys = 0;    PUSH1_SEL &amp;= ~(PUSH1_BV); \/* \u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0438\u043d\u0430 - GPIO *\/   PUSH1_DIR &amp;= ~(PUSH1_BV); \/* \u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0435\u0436\u0438\u043c \u043f\u0438\u043d\u0430 - \u0412\u0445\u043e\u0434 *\/      PUSH1_ICTL &amp;= ~(PUSH1_ICTLBIT); \/* \u041d\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u0438\u043d\u0435 *\/   PUSH1_IEN &amp;= ~(PUSH1_IENBIT);   \/* \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 *\/      PUSH2_SEL &amp;= ~(PUSH2_BV); \/* Set pin function to GPIO *\/   PUSH2_DIR &amp;= ~(PUSH2_BV); \/* Set pin direction to Input *\/      PUSH2_ICTL &amp;= ~(PUSH2_ICTLBIT); \/* don't generate interrupt *\/   PUSH2_IEN &amp;= ~(PUSH2_IENBIT);   \/* Clear interrupt enable bit *\/ } <\/code><\/pre>\n<p>  \u0412\u044b\u0437\u043e\u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043c\u0430\u043a\u0440\u043e\u0441 <b>HAL_BOARD_INIT <\/b>\u0444\u0430\u0439\u043b\u0430 <i>hal_board_cfg_DIYRuZRT.h<\/i>. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u2014 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 hal_key \u0432 \u0442\u043e\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u0435 <i>hal_board_cfg_DIYRuZRT.h<\/i>:  <\/p>\n<pre><code class=\"cpp\">#define HAL_KEY FALSE<\/code><\/pre>\n<p>  \u0422.\u043a. \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u0438.<br \/>  \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <b>zclDIYRuZRT_Init <\/b>\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u043d\u0430 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043a\u043d\u043e\u043f\u043e\u043a. \u0422\u0430\u0439\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <b>HAL_KEY_EVENT<\/b>.  <\/p>\n<pre><code class=\"cpp\">osal_start_reload_timer( zclDIYRuZRT_TaskID, HAL_KEY_EVENT, 100);<\/code><\/pre>\n<p>  \u0410 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <b>HAL_KEY_EVENT <\/b>\u0432\u044b\u0437\u0432\u0430\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>DIYRuZRT_HalKeyPoll<\/b>:  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a void DIYRuZRT_HalKeyPoll (void) {   uint8 keys = 0;    \/\/ \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 1 ?   if (HAL_PUSH_BUTTON1())   {     keys |= HAL_KEY_SW_1;   }      \/\/ \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 2 ?   if (HAL_PUSH_BUTTON2())   {     keys |= HAL_KEY_SW_2;   }      if (keys == halKeySavedKeys)   {     \/\/ \u0412\u044b\u0445\u043e\u0434 - \u043d\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439     return;   }   \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432 \u0441\u043b\u0435\u0434. \u0440\u0430\u0437   halKeySavedKeys = keys;    \/\/ \u0412\u044b\u0437\u043e\u0432\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043d\u043e\u043f\u043e\u043a   OnBoard_SendKeys(keys, HAL_KEY_STATE_NORMAL); } <\/code><\/pre>\n<p>  \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <b>halKeySavedKeys <\/b>\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u2014 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u0438 \u043e\u0442\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a.<\/p>\n<p>  \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u043d\u0430 5 \u0441\u0435\u043a\u0443\u043d\u0434. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0442\u0430\u0439\u043c\u0435\u0440 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <b>DIYRuZRT_EVT_LONG<\/b>. \u0415\u0441\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443 \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u044e\u0442, \u0442\u043e \u0442\u0430\u0439\u043c\u0435\u0440 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u044e\u0442 \u043a\u043d\u043e\u043f\u043a\u0443 \u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430.  <\/p>\n<pre><code class=\"cpp\">\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430\u0436\u0430\u0442\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448 static void zclDIYRuZRT_HandleKeys( byte shift, byte keys ) {   if ( keys &amp; HAL_KEY_SW_1 )   {     \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0433\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f - 5 \u0441\u0435\u043a     osal_start_timerEx(zclDIYRuZRT_TaskID, DIYRuZRT_EVT_LONG, 5000);     \/\/ \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u0435\u043b\u0435     updateRelay(RELAY_STATE == 0);   }   else   {     \/\/ \u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u043e\u043b\u0433\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f     osal_stop_timerEx(zclDIYRuZRT_TaskID, DIYRuZRT_EVT_LONG);   } } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0434\u043e\u043b\u0433\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0435\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <b>bdbAttributes.bdbNodeIsOnANetwork<\/b>  <\/p>\n<pre><code class=\"cpp\">  \/\/ \u0441\u043e\u0431\u044b\u0442\u0438\u0435 DIYRuZRT_EVT_LONG   if ( events &amp; DIYRuZRT_EVT_LONG )   {     \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430     \/\/ \u0412 \u0441\u0435\u0442\u0438 \u0438\u043b\u0438 \u043d\u0435 \u0432 \u0441\u0435\u0442\u0438?     if ( bdbAttributes.bdbNodeIsOnANetwork )     {       \/\/ \u043f\u043e\u043a\u0438\u0434\u0430\u0435\u043c \u0441\u0435\u0442\u044c       zclDIYRuZRT_LeaveNetwork();     }     else      {       \/\/ \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u043c \u0432\u0445\u043e\u0434 \u0432 \u0441\u0435\u0442\u044c       bdb_StartCommissioning(         BDB_COMMISSIONING_MODE_NWK_FORMATION |          BDB_COMMISSIONING_MODE_NWK_STEERING |          BDB_COMMISSIONING_MODE_FINDING_BINDING |          BDB_COMMISSIONING_MODE_INITIATOR_TL       );       \/\/ \u0431\u0443\u0434\u0435\u043c \u043c\u0438\u0433\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f       osal_start_timerEx(zclDIYRuZRT_TaskID, DIYRuZRT_EVT_BLINK, 500);     }          return ( events ^ DIYRuZRT_EVT_LONG );   } <\/code><\/pre>\n<p>  \u0418\u0434\u0435\u043c \u0434\u0430\u043b\u0435\u0435. \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432 NV-\u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e.  <\/p>\n<pre><code class=\"cpp\">  \/\/ \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c NVM \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f RELAY STATE   if ( SUCCESS == osal_nv_item_init( NV_DIYRuZRT_RELAY_STATE_ID, 1, &amp;RELAY_STATE ) ) {     \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 RELAY STATE \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438     osal_nv_read( NV_DIYRuZRT_RELAY_STATE_ID, 0, 1, &amp;RELAY_STATE );   }   \/\/ \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0435\u043b\u0435   applyRelay(); <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0435\u043b\u0435 void updateRelay ( bool value ) {   if (value) {     RELAY_STATE = 1;   } else {     RELAY_STATE = 0;   }   \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0435\u043b\u0435   osal_nv_write(NV_DIYRuZRT_RELAY_STATE_ID, 0, 1, &amp;RELAY_STATE);   \/\/ \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435   applyRelay(); }    \/\/ \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0435\u043b\u0435 void applyRelay ( void ) {   \/\/ \u0435\u0441\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e   if (RELAY_STATE == 0) {     \/\/ \u0442\u043e \u0433\u0430\u0441\u0438\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 1     HalLedSet ( HAL_LED_1, HAL_LED_MODE_OFF );   } else {     \/\/ \u0438\u043d\u0430\u0447\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 1     HalLedSet ( HAL_LED_1, HAL_LED_MODE_ON );   } } <\/code><\/pre>\n<h1>8. \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441 Zigbee<\/h1>\n<p>  \u0421 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u043e\u043a\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u2014 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u044d\u0442\u043e \u0436\u0435 \u0447\u0435\u0440\u0435\u0437 Zigbee.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043b\u0435 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 <b>GenOnOff<\/b>. \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e Zigbee Cluster Library \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 <b>GenOnOff<\/b>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zo\/9z\/z7\/zo9zz7ccj2oyfyrxrk3mithxh0i.png\"><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/7b\/na\/ek\/7bnaekoi4gmleiisjwvbfw75hao.png\"><br \/>  \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 OnOff \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b On, Off, Toggle.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 \u0432 <i>preinclude.h<\/i>:  <\/p>\n<pre><code class=\"cpp\">#define ZCL_ON_OFF<\/code><\/pre>\n<p>  \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 zclDIYRuZRT_Attrs \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:  <\/p>\n<pre><code class=\"cpp\">  \/\/ *** \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b On\/Off \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 ***   {     ZCL_CLUSTER_ID_GEN_ON_OFF,     { \/\/ \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435       ATTRID_ON_OFF,       ZCL_DATATYPE_BOOLEAN,       ACCESS_CONTROL_READ,       (void *)&amp;RELAY_STATE     }   },   {     ZCL_CLUSTER_ID_GEN_ON_OFF,     {  \/\/ \u0432\u0435\u0440\u0441\u0438\u044f On\/Off \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430       ATTRID_CLUSTER_REVISION,       ZCL_DATATYPE_UINT16,       ACCESS_CONTROL_READ | ACCESS_CLIENT,       (void *)&amp;zclDIYRuZRT_clusterRevision_all     }   }, <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 <b>zclDIYRuZRT_InClusterList<\/b>.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 <b>zclDIYRuZRT_CmdCallbacks<\/b>.  <\/p>\n<pre><code class=\"cpp\">\/*********************************************************************  * \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 ZCL \u043a\u043e\u043c\u0430\u043d\u0434  *\/ static zclGeneral_AppCallbacks_t zclDIYRuZRT_CmdCallbacks = {   zclDIYRuZRT_BasicResetCB,               \/\/ Basic Cluster Reset command   NULL,                                   \/\/ Identify Trigger Effect command   zclDIYRuZRT_OnOffCB,                    \/\/ On\/Off cluster commands   NULL,                                   \/\/ On\/Off cluster enhanced command Off with Effect   NULL,                                   \/\/ On\/Off cluster enhanced command On with Recall Global Scene   NULL,                                   \/\/ On\/Off cluster enhanced command On with Timed Off #ifdef ZCL_LEVEL_CTRL   NULL,                                   \/\/ Level Control Move to Level command   NULL,                                   \/\/ Level Control Move command   NULL,                                   \/\/ Level Control Step command   NULL,                                   \/\/ Level Control Stop command #endif <\/code><\/pre>\n<p>  \u0418 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0435\u0433\u043e:  <\/p>\n<pre><code class=\"cpp\">\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u043e\u043c\u0430\u043d\u0434 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 OnOff static void zclDIYRuZRT_OnOffCB(uint8 cmd) {   \/\/ \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043c \u0430\u0434\u0440\u0435\u0441, \u043e\u0442\u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u0448\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430   \/\/ \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043e\u0442\u0447\u0435\u0442   afIncomingMSGPacket_t *pPtr = zcl_getRawAFMsg();   zclDIYRuZRT_DstAddr.addr.shortAddr = pPtr-&gt;srcAddr.addr.shortAddr;      \/\/ \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c   if (cmd == COMMAND_ON) {     updateRelay(TRUE);   }   \/\/ \u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c   else if (cmd == COMMAND_OFF) {     updateRelay(FALSE);   }   \/\/ \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c   else if (cmd == COMMAND_TOGGLE) {     updateRelay(RELAY_STATE == 0);   } } <\/code><\/pre>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/rg\/_b\/r5\/rg_br5mwpw1z8g63trgcdts2o84.png\"><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/sc\/s8\/-h\/scs8-heldl3hz6l7h4ia3jllscw.png\"><br \/>  \u041d\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043b\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u043a\u043d\u043e\u043f\u043a\u043e\u0439.<br \/>  \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443:  <\/p>\n<pre><code class=\"cpp\">#define ZCL_REPORTING_DEVICE<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>zclDIYRuZRT_ReportOnOff <\/b>, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u0411\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0418\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0440\u0435\u043b\u0435 void zclDIYRuZRT_ReportOnOff(void) {   const uint8 NUM_ATTRIBUTES = 1;    zclReportCmd_t *pReportCmd;    pReportCmd = osal_mem_alloc(sizeof(zclReportCmd_t) +                               (NUM_ATTRIBUTES * sizeof(zclReport_t)));   if (pReportCmd != NULL) {     pReportCmd-&gt;numAttr = NUM_ATTRIBUTES;      pReportCmd-&gt;attrList[0].attrID = ATTRID_ON_OFF;     pReportCmd-&gt;attrList[0].dataType = ZCL_DATATYPE_BOOLEAN;     pReportCmd-&gt;attrList[0].attrData = (void *)(&amp;RELAY_STATE);      zclDIYRuZRT_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;     zclDIYRuZRT_DstAddr.addr.shortAddr = 0;     zclDIYRuZRT_DstAddr.endPoint = 1;      zcl_SendReportCmd(DIYRuZRT_ENDPOINT, &amp;zclDIYRuZRT_DstAddr,                       ZCL_CLUSTER_ID_GEN_ON_OFF, pReportCmd,                       ZCL_FRAME_CLIENT_SERVER_DIR, false, SeqNum++);   }    osal_mem_free(pReportCmd); } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u043b\u043e\u0433\u0430\u0445 \u0432\u0438\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430.<\/p>\n<h1>9. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0430\u0442\u0447\u0438\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b ds18b20<\/h1>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u0442\u0447\u0438\u043a \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u043f\u0438\u043d (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b <b>P2_1<\/b>).<br \/>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u0434 \u043e\u043f\u0440\u043e\u0441\u0430 \u0434\u0430\u0442\u0447\u0438\u043a\u0430. \u041e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u2014 \u0440\u0430\u0437 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443. \u0421\u0440\u0430\u0437\u0443 \u043f\u0440\u0438 \u043e\u043f\u0440\u043e\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u0441\u0435\u0442\u0438 \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438.<\/p>\n<p>  \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 ZCL \u043f\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b. \u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043a\u043b\u0430\u0441\u0442\u0435\u0440 <b>Temperature Measurement<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/o2\/_q\/8h\/o2_q8h7gtgxs7cjvvz8dumonsgq.png\"><br \/>  \u0412\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c 3 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430, \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 100.<br \/>  \u0417\u0434\u0435\u0441\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c <b>GenOnOff<\/b>. \u0418\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044e <b>DIYRuZRT_REPORTING_EVT<\/b>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0440\u0430\u0437 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443. \u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <b>zclDIYRuZRT_ReportTemp<\/b>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0418\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0435 void zclDIYRuZRT_ReportTemp( void ) {   \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443   zclDIYRuZRT_MeasuredValue = readTemperature();      const uint8 NUM_ATTRIBUTES = 1;    zclReportCmd_t *pReportCmd;    pReportCmd = osal_mem_alloc(sizeof(zclReportCmd_t) +                               (NUM_ATTRIBUTES * sizeof(zclReport_t)));   if (pReportCmd != NULL) {     pReportCmd-&gt;numAttr = NUM_ATTRIBUTES;      pReportCmd-&gt;attrList[0].attrID = ATTRID_MS_TEMPERATURE_MEASURED_VALUE;     pReportCmd-&gt;attrList[0].dataType = ZCL_DATATYPE_INT16;     pReportCmd-&gt;attrList[0].attrData = (void *)(&amp;zclDIYRuZRT_MeasuredValue);      zclDIYRuZRT_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;     zclDIYRuZRT_DstAddr.addr.shortAddr = 0;     zclDIYRuZRT_DstAddr.endPoint = 1;      zcl_SendReportCmd(DIYRuZRT_ENDPOINT, &amp;zclDIYRuZRT_DstAddr,                       ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT, pReportCmd,                       ZCL_FRAME_CLIENT_SERVER_DIR, false, SeqNum++);   }    osal_mem_free(pReportCmd); } <\/code><\/pre>\n<h1>10. \u0417\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/h1>\n<p>  \u0414\u043b\u044f \u0441\u043c\u0435\u043d\u044b devboard \u043d\u0430 Sonoff BASICZBR3 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0438\u043d\u043e\u0432 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u0438 \u043a\u043d\u043e\u043f\u043a\u0438.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/eg\/fu\/we\/egfuweya8lj53yh-5rarbvslzvk.png\"><br \/>  \u041f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 1 \u043d\u0430 \u043f\u0438\u043d <b>P0_7<\/b>, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0435\u043b\u0435. \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c <b>ACTIVE_HIGH<\/b>. \u041a\u043d\u043e\u043f\u043a\u0443 <b>S1 <\/b>\u043f\u0435\u0440\u0435\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u043c \u043d\u0430 \u043f\u0438\u043d <b>P1_3<\/b>, \u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 2 \u043d\u0430 <b>P1_0<\/b>. \u0414\u0430\u0442\u0447\u0438\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u043f\u0438\u043d\u0435 <b>P2_1<\/b>. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u043b\u0430\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 <i>hal_board_cfg_DIYRuZRT.h<\/i>. \u0414\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 <b>HAL_SONOFF<\/b>. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u0430, \u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f Sonoff BASICZBR3, \u0438\u043d\u0430\u0447\u0435 \u0434\u043b\u044f devboard.  <\/p>\n<pre><code class=\"cpp\">#ifdef HAL_SONOFF   \/* 1 - P0_7 \u0420\u0435\u043b\u0435 *\/   #define LED1_BV           BV(7)   #define LED1_SBIT         P0_7   #define LED1_DDR          P0DIR   #define LED1_POLARITY     ACTIVE_HIGH    \/* 2 - P1_0 \u0421\u0438\u043d\u0438\u0439 *\/   #define LED2_BV           BV(0)   #define LED2_SBIT         P1_0   #define LED2_DDR          P1DIR   #define LED2_POLARITY     ACTIVE_LOW #else   \/* 1 - P1_0 \u0417\u0435\u043b\u0435\u043d\u044b\u0439 *\/   #define LED1_BV           BV(0)   #define LED1_SBIT         P1_0   #define LED1_DDR          P1DIR   #define LED1_POLARITY     ACTIVE_LOW    \/* 2 - P1_1 \u041a\u0440\u0430\u0441\u043d\u044b\u0439 *\/   #define LED2_BV           BV(1)   #define LED2_SBIT         P1_1   #define LED2_DDR          P1DIR   #define LED2_POLARITY     ACTIVE_LOW #endif <\/code><\/pre>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0432\u0430\u0436\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u2014 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u0432\u0430\u0440\u0446\u0430, \u0442.\u043a. \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 Sonoff BASICZBR3 \u043e\u043d \u043d\u0435 \u0440\u0430\u0441\u043f\u0430\u044f\u043d:  <\/p>\n<pre><code class=\"cpp\">\/\/#define HAL_CLOCK_CRYSTAL   #define OSC32K_CRYSTAL_INSTALLED FALSE<\/code><\/pre>\n<p>  \u0411\u0435\u0437 \u044d\u0442\u0438\u0445 \u043e\u043f\u0446\u0438\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043d\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 (\u0442\u043e\u0447\u043d\u0435\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430).<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.<\/p>\n<blockquote><p><b>\u0412\u041d\u0418\u041c\u0410\u041d\u0418\u0415!!! \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0440\u0435\u043b\u0435 Sonoff BASICZBR3 \u043e\u0442 \u0441\u0435\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u043b\u044e\u0431\u044b\u043c\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439!<\/b><\/p><\/blockquote>\n<p>  \u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c Sonoff BASICZBR3 \u043f\u0440\u043e\u0432\u043e\u0434\u043a\u0430\u043c\u0438 \u0441 CCDebugger, \u0441\u0442\u0438\u0440\u0430\u0435\u043c \u0447\u0438\u043f \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bz\/w-\/3b\/bzw-3bib84ucfczt0kg_mmbajtw.jpeg\"><\/p>\n<h1>11. \u0417\u0430\u0432\u043e\u0434\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 zigbee2mqtt \u0438 ioBroker.Zigbee<\/h1>\n<p>  \u0425\u043e\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0443 \u043d\u0430\u0441 \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434, \u043d\u043e \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u2014 \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438.<br \/>  \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 <b>ioBroker.Zigbee<\/b>, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c 2 \u0448\u0430\u0433\u0430:  <\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043f\u0430\u043a\u0435\u0442 <b>zigbee-herdsman-converters<\/b>. \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <b>zigbee2mqtt<\/b>.  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 <b>ioBroker.Zigbee<\/b>  <\/li>\n<\/ol>\n<p>  \u0412\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u0435\u0440\u0432\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c PR \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/p>\n<p>  \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 <b>zigbee-herdsman-converters<\/b> \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c ioBroker (\u0438\u043b\u0438 zigbee2mqtt). \u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0444\u0430\u0439\u043b <i>devices.js<\/i> <a href=\"https:\/\/github.com\/Koenkk\/zigbee-herdsman-converters\/blob\/master\/devices.js\">https:\/\/github.com\/Koenkk\/zigbee-herdsman-converters\/blob\/master\/devices.js<\/a><br \/>  \u0412 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c <b>ioBroker.zigbee<\/b> \u0438 <b>zigbee2mqtt<\/b>. \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043d\u0435\u043c \u0431\u043b\u043e\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 DIYRuZ (\u043f\u043e\u0441\u043b\u0435 2300 \u0441\u0442\u0440\u043e\u043a\u0438). \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430:  <\/p>\n<pre><code class=\"javascript\">\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0zigbeeModel: ['DIYRuZ_RT'], \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0model: 'DIYRuZ_RT', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0vendor: 'DIYRuZ', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0description: '', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0supports: 'on\/off, temperature', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fromZigbee: [fz.on_off, fz.temperature], \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0toZigbee: [tz.on_off], \u00a0\u00a0\u00a0\u00a0}, <\/code><\/pre>\n<p>  \u0412 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <b>fromZigbee <\/b>\u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u041d\u0430\u0448\u0438 \u0434\u0432\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u044b. \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 <b>fz.on_off<\/b> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u0430 <b>fz.temperature<\/b> \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0435. \u0412 \u043a\u043e\u0434\u0435 \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u043e\u0432 (\u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 converters\/fromZigbee.js) \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0447\u0442\u043e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 100.  <\/p>\n<pre><code class=\"javascript\">   on_off: {         cluster: 'genOnOff',         type: ['attributeReport', 'readResponse'],         convert: (model, msg, publish, options, meta) =&gt; {             if (msg.data.hasOwnProperty('onOff')) {                 const property = getProperty('state', msg, model);                 return {[property]: msg.data['onOff'] === 1 ? 'ON' : 'OFF'};             }         },     }, <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"javascript\"> temperature: {         cluster: 'msTemperatureMeasurement',         type: ['attributeReport', 'readResponse'],         convert: (model, msg, publish, options, meta) =&gt; {             const temperature = parseFloat(msg.data['measuredValue']) \/ 100.0;             return {temperature: calibrateAndPrecisionRoundOptions(temperature, options, 'temperature')};         },     }, <\/code><\/pre>\n<p>  \u0412 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <b>toZigbee <\/b>\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 <b>tz.on_off<\/b> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u043b\u0435.<\/p>\n<p>  \u0412\u0441\u0451, \u0432 \u00ab\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u044b\u00bb \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438. \u041a\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <b>zigbee2mqtt <\/b> \u2014 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0410 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 ioBroker \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0444\u0430\u0439\u043b<i> ioBroker.zigbee\\lib\\devices.js<\/i>  <\/p>\n<pre><code class=\"javascript\">\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0vendor: 'DIYRuZ', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0models: ['DIYRuZ_RT'], \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0icon: 'img\/DIYRuZ.png', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0states: [ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0states.state, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0states.temperature, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0], \u00a0\u00a0\u00a0\u00a0}, <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u043c\u043e\u0434\u0435\u043b\u044c, \u0444\u0430\u0439\u043b \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u0438 \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435: <b>state <\/b>\u0434\u043b\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0435\u043b\u0435, <b>temperature<\/b> \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/oz\/fu\/zm\/ozfuzmz72p-e1lwweegnd4fv74q.png\"><\/p>\n<h1>12. \u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435?<\/h1>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044f \u043d\u0435 \u0441\u043c\u043e\u0433 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u043c\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Z-Stack 3.0. \u0421\u043a\u043e\u0440\u0435\u0439 \u0432\u0441\u0435\u0433\u043e \u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0438\u043b\u0438 \u0434\u043b\u044f \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b.<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c. \u0412\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:  <\/p>\n<ul>\n<li>\u042f \u043d\u0435 \u0441\u043c\u043e\u0433 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043b\u0435. \u0414\u0440\u0443\u0433\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430-\u0440\u043e\u0443\u0442\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u201cpermit_join\u201d \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0431\u044f, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043d\u043e\u0441\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440\u0443. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u043c, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0441\u0435\u0442\u0438, \u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u201cpermit_join\u201d, \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0422\u043e\u0447\u043d\u0435\u0435, \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442, \u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e.<\/li>\n<li>\u0422\u0430\u043a\u0436\u0435, \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 reporting. \u042d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 configReport \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438.<\/li>\n<li>\u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u043e\u0441 \u043a\u043d\u043e\u043f\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f.<\/li>\n<\/ul>\n<p>  \u041d\u0443 \u0430 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u201c\u0441\u043f\u044f\u0449\u0438\u0445\u201d \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0430\u0445.<\/p>\n<blockquote><p>\u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u043f\u043e\u043c\u0438\u043c\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432, \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u044d\u0442\u043e \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 <a href=\"https:\/\/t.me\/zigbeer\">\u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u0447\u0430\u0442\u0438\u043a\u0435 \u043f\u043e Zigbee<\/a>.<\/p>\n<p>  \u0425\u043e\u0447\u0443 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u043f\u043e \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u0447\u0430\u0442\u0443 \u0438 Zigbee \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443:  <\/p>\n<ul>\n<li><a href=\"https:\/\/t.me\/DJONvl\">t.me\/DJONvl<\/a><\/li>\n<li><a href=\"https:\/\/t.me\/antstar\">t.me\/antstar<\/a><\/li>\n<li><a href=\"https:\/\/t.me\/Jager_f\">t.me\/Jager_f<\/a><\/li>\n<\/ul>\n<p>  <\/p><\/blockquote>\n<h1>\u0421\u0441\u044b\u043b\u043a\u0438<\/h1>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 SDK Z-Stack 3.0.2 \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c. \u041d\u043e \u0447\u0430\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043e\u043a \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0442\u0443\u0442:  <\/p>\n<ul>\n<li><a href=\"https:\/\/processors.wiki.ti.com\/images\/a\/a9\/06_-_OSAL_and_HAL.pdf\">OSAL \u0438 HAL <\/a><\/li>\n<li><a href=\"https:\/\/processors.wiki.ti.com\/index.php\/Category:Zigbee\">TI ZIgbee Wiki<\/a><\/li>\n<li><a href=\"http:\/\/staffwww.itn.liu.se\/~qinye29\/tne090\/Create%20New%20Application%20For%20CC2530DB.pdf\">Create New Application For SmartRF05 + CC2530 SWRA231 Version 1.1<\/a><\/li>\n<li><a href=\"https:\/\/e2e.ti.com\/cfs-file\/__key\/communityserver-discussions-components-files\/158\/Z_2D00_Stack-Home-Sample-Application-User_2700_s-Guide.pdf\">Z-Stack Home Sample Application User&#8217;s Guide SWRU354 Version 1.3<\/a><\/li>\n<li><a href=\"http:\/\/staffwww.itn.liu.se\/~qinye29\/tne090\/Z-Stack%20Sample%20Applications.pdf\">Z-Stack Sample Applications SWRA201 Version 1.6<\/a><\/li>\n<li><a href=\"https:\/\/e2echina.ti.com\/cfs-file\/__key\/communityserver-discussions-components-files\/104\/5633.Z_2D00_Stack-Developer_2700_s-Guide.pdf\">Z-Stack Developer&#8217;s Guide SWRA176 Version 1.12<\/a>\u00a0<\/li>\n<li><a href=\"https:\/\/drive.google.com\/open?id=1j2HvP4wPrp18GOgkkdbQwKQMwHYmnR5p\">Z-Stack 3.0 Developer&#8217;s Guide Version 1.14<\/a>\u00a0<\/li>\n<li><a href=\"http:\/\/www.deyisupport.com\/cfs-file.ashx\/__key\/communityserver-discussions-components-files\/104\/6406.Z_2D00_Stack-API.pdf\">Z-Stack API SWRA195 Version 1.10<\/a>\u00a0<\/li>\n<li><a href=\"http:\/\/www.ti.com\/lit\/ug\/swru191f\/swru191f.pdf\">TI CC253x User&#8217;s Guide<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/formtapez\/ZigUP\">https:\/\/github.com\/formtapez\/ZigUP<\/a><\/li>\n<li><a href=\"https:\/\/zigbeealliance.org\/wp-content\/uploads\/2019\/12\/07-5123-06-zigbee-cluster-library-specification.pdf\">Zigbee Cluster Library rev 6<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/diyruz\/diyruz_rt\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u044b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 DIYRuZ_RT<\/a><\/li>\n<\/ul>\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\/company\/iobroker\/blog\/495926\/\"> https:\/\/habr.com\/ru\/company\/iobroker\/blog\/495926\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/iobroker\/blog\/495926\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pk\/k8\/1r\/pkk81rmgifam0ccamhmapnesahq.jpeg\"><\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 C, \u0447\u0442\u043e-\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043e Zigbee, \u0447\u0438\u043f\u0435 cc2530, \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u0435\u0433\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u0430\u043a zigbee2mqtt. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u0438\u043b\u0438 \u0441\u0445\u043e\u0434\u0438\u0442\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 <a href=\"https:\/\/myzigbee.ru\/\">https:\/\/myzigbee.ru<\/a> \u0438 <a href=\"https:\/\/www.zigbee2mqtt.io\/\">https:\/\/www.zigbee2mqtt.io\/<\/a><br \/>  \u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u043f\u0435\u0440\u0432\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e, \u043d\u043e \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0438 \u0443\u0436\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0435\u0442\u0430\u043b\u044f\u0445, \u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0438\u0445.<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 <a href=\"https:\/\/github.com\/diyruz\/diyruz_rt\">github.com\/diyruz\/diyruz_rt<\/a><br \/>  \u041a\u043e\u0434 \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u201c\u042f \u043d\u0435 \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u0438\u043a, \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0447\u0443\u0441\u044c.\u201d<\/p>\n<h1>\u0426\u0435\u043b\u044c<\/h1>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u2014 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u043e\u0434 Z-Stack, \u0434\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u0435\u043b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043f\u043e\u0434 \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 (\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u0440\u0435\u043b\u0435 <a href=\"https:\/\/www.itead.cc\/sonoff-basiczbr3.html\">Sonoff BASICZBR3<\/a>) \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b ds18b20.<\/p>\n<p>  \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c Zigbee-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u043e\u0434 \u0447\u0438\u043f TI cc2530 \u043d\u0430 Z-Stack.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-301428","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/301428","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=301428"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/301428\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=301428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=301428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=301428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}