{"id":325331,"date":"2021-06-23T09:00:20","date_gmt":"2021-06-23T09:00:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=325331"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=325331","title":{"rendered":"\u0423 \u043d\u0430\u0441 \u0431\u044b\u043b \u043e\u0434\u0438\u043d \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0442\u0435\u043f\u043b\u0430 \u0441 M-Bus, RaspberryPi, M-Bus to USB \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0440, Telegram-\u0431\u043e\u0442 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 Go"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<h2>\u041d\u0430\u0447\u0430\u043b\u043e<\/h2>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u044f \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u043f\u043e\u0434\u0430\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u0432 \u043d\u043e\u0432\u043e\u0435 \u0436\u0438\u043b\u044c\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A2%D0%B5%D0%BF%D0%BB%D0%BE%D1%81%D1%87%D1%91%D1%82%D1%87%D0%B8%D0%BA\" rel=\"noopener noreferrer nofollow\">\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043f\u043b\u0430<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0442\u043e\u0436\u0435) \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443 \u0443\u0441\u043b\u0443\u0433 \u0442\u0435\u043f\u043b\u043e\u0432\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0441\u044f\u0446 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0442\u0435\u043f\u043b\u0430 \u0432 \u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u0430\u0431\u0438\u043d\u0435\u0442 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u043b\u043e\u0432\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u041c\u043e\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0435\u043c \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0435 \u0432 \u0444\u0430\u043b\u044c\u0448\u0441\u0442\u0435\u043d\u0435, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0432\u0438\u0437\u0438\u043e\u043d\u043d\u0443\u044e \u0440\u0430\u043c\u043a\u0443. \u0412 \u0446\u0435\u043b\u043e\u043c \u2015 \u044d\u0442\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0415\u0432\u0440\u043e\u043f\u044b \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0430\u0441\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0442\u0435\u043f\u043b\u043e\u0432\u044b\u0445 \u0443\u0441\u043b\u0443\u0433. \u0422\u0430\u043a\u0436\u0435, \u0432 \u043d\u0430\u0448\u0438\u0445 \u0448\u0438\u0440\u043e\u0442\u0430\u0445 \u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BE%D0%B2%D0%BB%D0%B0%D0%B4%D0%B5%D0%BB%D1%8C%D1%86%D0%B5%D0%B2_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BA%D0%B2%D0%B0%D1%80%D1%82%D0%B8%D1%80%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B4%D0%BE%D0%BC%D0%B0\" rel=\"noopener noreferrer nofollow\">\u041e\u0421\u041c\u0414<\/a>, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u043e\u0434\u044a\u0435\u0437\u0434\u0430 \u0438\u043b\u0438 \u0434\u043e\u043c\u0430. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435 \u043c\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u043b\u0430 \u043c\u044b\u0441\u043b\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043a\u0430\u043a \u0437\u0432\u0443\u0447\u0430\u043b \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u0439 \u0441\u043b\u043e\u0433\u0430\u043d IBM:<\/p>\n<blockquote>\n<p>Machines should work; people should think.<\/p>\n<p>\u2015 IBM<\/p>\n<\/blockquote>\n<p><iframe id=\"60c76c566f06c2a29f4b453f\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/60c76c566f06c2a29f4b453f\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/p>\n<h2>\u0411\u043b\u0438\u0436\u0435 \u043a \u0434\u0435\u043b\u0443<\/h2>\n<p>\u041a\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0438\u0447\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/35e\/319\/134\/35e319134e6123887c948fdea85ddce3.png\" width=\"894\" height=\"114\"><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u0437 \u0436\u0435\u043b\u0435\u0437\u0430:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/www.diehl.com\/metering\/en\/products-services\/thermal-energy-metering-\/thermal-energy-metering-product\/sharky-774-compact\/71466\/\" rel=\"noopener noreferrer nofollow\">\u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0442\u0435\u043f\u043b\u0430<\/a> \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 M-Bus<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.raspberrypi.org\/products\/raspberry-pi-2-model-b\/\" rel=\"noopener noreferrer nofollow\">Raspberry Pi 2<\/a> \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 <a href=\"https:\/\/www.raspberrypi.org\/software\/operating-systems\/#raspberry-pi-os-32-bit\" rel=\"noopener noreferrer nofollow\">Raspberry Pi OS<\/a><\/p>\n<\/li>\n<li>\n<p>M-Bus master \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/p>\n<\/li>\n<li>\n<p>Wi-Fi \u0440\u0435\u043b\u0435 Sonoff s20<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0430\u0431\u043e\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435. \u0421\u043b\u0435\u0432\u0430 \u0431\u043b\u043e\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043b\u0435. \u0412 \u0446\u0435\u043d\u0442\u0440\u0435 \u0441\u0430\u043c Raspberry Pi. \u0421\u043f\u0440\u0430\u0432\u0430 M-Bus \u043d\u0430 USB \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0440 (\u0431\u0435\u043b\u044b\u0439 \u0448\u043d\u0443\u0440 \u0438\u0434\u0435\u0442 \u043a \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0443 \u0442\u0435\u043f\u043b\u0430).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e7c\/b85\/dbd\/e7cb85dbdb718e6f6bef036e72331e11.png\" width=\"1280\" height=\"854\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/github.com\/rscada\/libmbus\" rel=\"noopener noreferrer nofollow\">\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443<\/a> \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f M-Bus \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/golang.org\/\" rel=\"noopener noreferrer nofollow\">Golang<\/a><\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c  \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445. \u041f\u0435\u0440\u0432\u0430\u044f \u2015 \u044d\u0442\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430, \u0432\u0442\u043e\u0440\u0430\u044f \u2015  \u043f\u043e\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0442\u0435\u043f\u043b\u043e\u0441\u0435\u0442\u0435\u0439.<\/p>\n<h2>M-Bus<\/h2>\n<p><a href=\"https:\/\/m-bus.com\/documentation\" rel=\"noopener noreferrer nofollow\">M-Bus<\/a> \u2015 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432 \u0442\u0435\u043f\u043b\u0430 \u0438\u043b\u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0443\u0447\u0435\u0442\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0432 \u0415\u0432\u0440\u043e\u043f\u0435. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043a\u0430\u0431\u0435\u043b\u044e \u0438 \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u043e \u043a\u0430\u0431\u0435\u043b\u044e.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438:<\/p>\n<ul>\n<li>\n<p>\u041a \u043e\u0434\u043d\u043e\u043c\u0443 master \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432 (slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432)<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441<\/p>\n<\/li>\n<li>\n<p>\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 12-36 V: \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u00ab0\u00bb \u2015 12..24 V, \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u00ab1\u00bb \u2015 36 V<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0442\u0438\u043f \u043a\u0430\u0431\u0435\u043b\u044f \u2015 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u044b\u0439 (JYStY N*2*0.8 mm). \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432\u0438\u0442\u0443\u044e \u043f\u0430\u0440\u0443 \u0441 \u0441\u0435\u0447\u0435\u043d\u0438\u0435\u043c 0.51 \u043c\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u0443\u0436\u0435 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0442\u044f\u043d\u0443\u0442\u0430 \u0432 \u043f\u043e\u0434\u044a\u0435\u0437\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b M-Bus (\u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432 \u0440\u043e\u043b\u0438 slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430). \u0423 \u043c\u0435\u043d\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a <a href=\"https:\/\/www.diehl.com\/metering\/en\/products-services\/thermal-energy-metering-\/thermal-energy-metering-product\/sharky-774-compact\/71466\/\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439<\/a> \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u044b\u0445\u043e\u0434 \u043f\u0440\u043e\u0432\u043e\u0434\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a.<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"float bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3fa\/7e3\/926\/3fa7e3926c8ef88b58795b03435b846f.png\" alt=\"\u0412\u044b\u0445\u043e\u0434 M-Bus\" title=\"\u0412\u044b\u0445\u043e\u0434 M-Bus\" width=\"1280\" height=\"1216\"><figcaption>\u0412\u044b\u0445\u043e\u0434 M-Bus<\/figcaption><\/figure>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e M-Bus master-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0449\u0435 \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u0438\u0437 36 V \u0432 5 V.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0432\u0440\u043e\u0434\u0435 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f. \u042f \u043e\u0442\u043a\u0440\u044b\u043b \u043a\u043e\u0440\u043f\u0443\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u0444\u043e\u0442\u043e \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u0421\u0430\u043c\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u043e \u043d\u0430 Aliexpress. \u0421\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0442\u043e\u0432\u0430\u0440 \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0442\u044c. \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u0430\u043c &#171;M-Bus USB Master&#187; \u0434\u0430\u0441\u0442 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0412\u0430\u0436\u043d\u043e: \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e master-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u041f\u043e\u0437\u0436\u0435 \u043c\u043d\u0435 \u043d\u0430 \u0433\u043b\u0430\u0437\u0430 \u043f\u043e\u043f\u0430\u043b\u0430\u0441\u044c <a href=\"https:\/\/www.packom.net\/m-bus-hats\/\" rel=\"noopener noreferrer nofollow\">\u043f\u043b\u0430\u0442\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/a> \u0434\u043b\u044f Raspberry Pi. \u042f \u043d\u0435 \u043c\u043e\u0433\u0443 \u0434\u0430\u0442\u044c \u043e\u0442\u0437\u044b\u0432\u0430 \u043f\u043e \u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0435, \u043d\u043e \u0432\u0432\u0438\u0434\u0443 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0431\u044b \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/873\/90f\/c60\/87390fc60d99fea63cfe4328b9475bf3.png\" width=\"1280\" height=\"815\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u043a master-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a Raspberry Pi \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 (\u0443 \u043c\u0435\u043d\u044f \u043d\u0430 <a href=\"https:\/\/www.raspberrypi.org\/software\/operating-systems\/#raspberry-pi-os-32-bit\" rel=\"noopener noreferrer nofollow\">Raspberry Pi OS<\/a> \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \/dev\/ttyUSB0). \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/rscada\/libmbus\" rel=\"noopener noreferrer nofollow\">\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/a> \u0438 cli \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u0435\u0435 \u043e\u0441\u043d\u043e\u0432\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043f\u0440\u0438\u0435\u043c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 M-Bus \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c.<\/p>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a Raspberry Pi \u043f\u043e <a href=\"https:\/\/www.raspberrypi.org\/documentation\/remote-access\/ssh\/\" rel=\"noopener noreferrer nofollow\">SSH<\/a>. \u0418 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u0442\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<ol>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432:<br \/><code>wget https:\/\/github.com\/rscada\/libmbus\/archive\/master.zip<br \/>&amp;&amp; unzip master.zip<br \/>&amp;&amp; cd libmbus-master<\/code><\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0441\u0442\u0430\u0432\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438:<br \/><code>apt-get install build-essential libtool autoconf m4<\/code><\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c:<br \/><code>.\/build.sh<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0435 libmbus-master\/bin \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u044b.  \u0423\u0442\u0438\u043b\u0438\u0442\u0430 mbus-serial-request-data  \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0435, \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c. \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. <\/p>\n<p><a class=\"anchor\" name=\"request_data\" id=\"request_data\"><\/a><\/p>\n<p>\u0412\u044b\u0437\u043e\u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<br \/><code>.\/mbus-serial-request-data -b 2400 \/dev\/ttyUSB0 12<\/code><\/p>\n<p>\u0433\u0434\u0435,<\/p>\n<ul>\n<li>\n<p>-b 2400 \u2015 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u0430\u044f \u0432 \u0431\u043e\u0434\u0430\u0445. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0430\u0448 \u0441\u0447\u0435\u0442\u0447\u0438\u043a, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0432 \u0435\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435. \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u043e 300 \u0438 2400 \u0431\u043e\u0434.  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u043e\u0442 300 \u0434\u043e 9600 \u0431\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p>\/dev\/ttyUSB0 \u2015 \u043f\u0443\u0442\u044c \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a Raspberry Pi.<\/p>\n<\/li>\n<li>\n<p>12 \u2015 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430).<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u0442\u043e\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432 m-bus \u0441\u0435\u0442\u0438. M-Bus \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438: \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 (primary address) \u0438 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 (secondary address). \u0412\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043e\u043d\u0438 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u044f\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1 \u0434\u043e 250 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c) \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <code>mbus-serial-set-address<\/code>. \u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u0448\u0438\u0442 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e (\u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d) \u0438 \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0438\u0436\u0435.<\/p>\n<p><a class=\"anchor\" name=\"secondary_address\" id=\"secondary_address\"><\/a><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"184\" width=\"184\">\n<p><strong>Identification-Nr.<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Manufacturer. (hex.)<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Version (hex.)<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Media (hex.)<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"184\" width=\"184\">\n<p>14491001<\/p>\n<\/td>\n<td>\n<p>1057<\/p>\n<\/td>\n<td>\n<p>01<\/p>\n<\/td>\n<td>\n<p>06 <\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e 1 \u0431\u0430\u0439\u0442 \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0435. \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432 \u0441\u0435\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u0434\u043e 250.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a8b\/530\/38e\/a8b53038e724b1880b8ab2afe0930cc4.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 FDh (253) - \u044d\u0442\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f 254 \u0438 255 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443. 251 \u0438 252 \u2015 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0436\u0435 \u043e\u0442 1 \u0434\u043e 250 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \" title=\"\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 FDh (253) - \u044d\u0442\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f 254 \u0438 255 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443. 251 \u0438 252 \u2015 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0436\u0435 \u043e\u0442 1 \u0434\u043e 250 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \" width=\"1728\" height=\"736\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 FDh (253) &#8212; \u044d\u0442\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f 254 \u0438 255 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443. 251 \u0438 252 \u2015 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0436\u0435 \u043e\u0442 1 \u0434\u043e 250 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. <\/figcaption><\/figure>\n<ol>\n<li>\n<p>Master \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 CI (control information) \u043f\u043e\u043b\u0435\u043c \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 52h \u0438\u043b\u0438 56h, A (address field) \u043f\u043e\u043b\u0435\u043c \u0440\u0430\u0432\u043d\u044b\u043c FDh (253) \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432 \u0442\u0435\u043b\u0435 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>Slave \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0443, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u043e \u0441\u0432\u043e\u0438\u043c, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u00abselected state\u00bb \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 E5h.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 FDh (253) \u0432 A (address field).<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 master \u0438 slave \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430, master \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u00abselected state\u00bb \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 CI \u043f\u043e\u043b\u0435\u043c 40h.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432, \u043d\u043e \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432 \u0441\u0435\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0438\u0437\u0431\u0435\u0436\u0430\u0432 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0415\u0449\u0435 \u043e\u043d \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0435\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u2015 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0438\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430\u043c. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0435\u043c\u0443 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0438\u043b\u0438 \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u043e\u0440\u043f\u0443\u0441\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441, \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e <a href=\"#secondary_address\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u0431\u043b\u0438\u0446\u0435<\/a>. \u0418\u043b\u0438 \u0436\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0443\u0442\u0438\u043b\u0438\u0442.<\/p>\n<p><code>.\/mbus-serial-scan-secondary -b 2400 \/dev\/ttyUSB0<\/code><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434:<br \/>Found a device on secondary address 58740397A511410C [using address mask 5FFFFFFFFFFFFFFF]<\/p>\n<p>\u0417\u043d\u0430\u044f \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 12 (\u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435):<\/p>\n<p><code>.\/mbus-serial-set-address -b 2400 \/dev\/ttyUSB0  58740397A511410C 12<\/code><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434:<br \/>Set primary address of device to 12<\/p>\n<p>\u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443:<\/p>\n<p><code>.\/mbus-serial-scan -b 2400 \/dev\/ttyUSB0<\/code><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434:<br \/>Found a M-Bus device at address 12<\/p>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e, <a href=\"#request_data\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435<\/a> \u0443 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430:<\/p>\n<p><code>.\/mbus-serial-request-data -b 2400 \/dev\/ttyUSB0 12<\/code><\/p>\n<p><a class=\"anchor\" name=\"xml_example\" id=\"xml_example\"><\/a><\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c xml \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435<\/summary>\n<div class=\"spoiler__content\"><a class=\"anchor\" name=\"xml_example\" id=\"xml_example\"><\/a><\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"ISO-8859-1\"?&gt; &lt;MBusData&gt;      &lt;SlaveInformation&gt;         &lt;Id&gt;58630287&lt;\/Id&gt;         &lt;Manufacturer&gt;DME&lt;\/Manufacturer&gt;         &lt;Version&gt;65&lt;\/Version&gt;         &lt;ProductName&gt;&lt;\/ProductName&gt;         &lt;Medium&gt;Heat: Inlet&lt;\/Medium&gt;         &lt;AccessNumber&gt;5&lt;\/AccessNumber&gt;         &lt;Status&gt;00&lt;\/Status&gt;         &lt;Signature&gt;0000&lt;\/Signature&gt;     &lt;\/SlaveInformation&gt;      &lt;DataRecord id=\"0\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Reserved (0x0d)&lt;\/Unit&gt;         &lt;Value&gt;12667&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"1\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Tariff&gt;1&lt;\/Tariff&gt;         &lt;Device&gt;0&lt;\/Device&gt;         &lt;Unit&gt;Reserved (0x0d)&lt;\/Unit&gt;         &lt;Value&gt;0&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"2\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Tariff&gt;2&lt;\/Tariff&gt;         &lt;Device&gt;0&lt;\/Device&gt;         &lt;Unit&gt;Reserved (0x0d)&lt;\/Unit&gt;         &lt;Value&gt;0&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"3\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Volume (m m^3)&lt;\/Unit&gt;         &lt;Value&gt;1476014&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"4\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Power (W)&lt;\/Unit&gt;         &lt;Value&gt;0&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"5\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Volume flow (m m^3\/h)&lt;\/Unit&gt;         &lt;Value&gt;0&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"6\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Flow temperature (1e-1 deg C)&lt;\/Unit&gt;         &lt;Value&gt;207&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"7\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Return temperature (1e-1 deg C)&lt;\/Unit&gt;         &lt;Value&gt;208&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"8\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Operating time (days)&lt;\/Unit&gt;         &lt;Value&gt;1323&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"9\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Operating time (hours)&lt;\/Unit&gt;         &lt;Value&gt;0&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;  &lt;\/MBusData&gt;<\/code><\/pre>\n<\/div>\n<\/details>\n<h2>\u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434<\/h2>\n<p>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u2015 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0447\u043d\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434. <\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0432 \u043d\u0430 \u0442\u0435\u043c\u0443 &#171;\u043f\u043e\u0447\u0435\u043c\u0443 Go&#187;?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 \u0432\u044b\u0431\u043e\u0440 \u044f\u0437\u044b\u043a\u0430 \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u0438\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u043e\u0442 \u0442\u0430\u043a\u0438\u0445, \u043a\u0430\u043a \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443 \u0432\u0430\u0441 \u0432 \u0448\u0442\u0430\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0438\u0437\u043e\u0439, \u0438 \u0434\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u043b\u0435\u0433\u0430\u0441\u0438 \u043a\u043e\u0434\u0430 \u0438 \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0432 \u0446\u0435\u043b\u043e\u043c. \u0412 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435\u0442 \u0442\u0430\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432 \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0446\u0435\u043b\u044f\u0445, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043d\u0435 \u044f\u0437\u044b\u043a \u0437\u0430 \u0435\u0433\u043e \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0443\u0441\u0438\u043b\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\/\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c \u0421 \u0438\u043b\u0438 \u0421++, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e.<\/p>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D1%80%D0%BE%D1%81%D1%81-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80\" rel=\"noopener noreferrer nofollow\">\u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440<\/a> \u0432\u043d\u0443\u0442\u0440\u0438 <a href=\"https:\/\/docs.docker.com\/engine\/install\/\" rel=\"noopener noreferrer nofollow\">docker<\/a>-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u0434 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c Raspberry Pi. Docker \u2015 \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u0443 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0430 \u0445\u043e\u0441\u0442\u043e\u0432\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443.<\/p>\n<pre><code class=\"cmake\"># \u0411\u0435\u0440\u0435\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0438\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f Golang. FROM golang:1.16.2 AS buld_heatmeter  # \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c silent mode \u0434\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 (\u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e). ARG DEBIAN_FRONTEND=noninteractive  RUN apt-get update RUN apt-get upgrade -y  # \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0431\u043e\u0440\u043a\u0438. RUN apt-get install gcc-arm-linux-gnueabihf -y sudo -y make -y git -y autoconf -y libtool -y RUN apt-get clean  # \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0430\u0440\u043e\u043b\u044f \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 sudo. RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' &gt;&gt; \/etc\/sudoers  # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. RUN useradd -rm -d \/home\/debian -s \/bin\/bash -g root -G sudo debian USER debian ARG HOME_DIR=\"\/home\/debian\"  WORKDIR ${HOME_DIR}  # \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 (\u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 Dockerfile). COPY . heatmeter  # \u041c\u0435\u043d\u044f\u0435\u043c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0438. RUN sudo chown -R debian:root heatmeter  WORKDIR ${HOME_DIR}\/heatmeter  # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438. RUN bash build.sh  # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0430\u0437\u0443 \u0441\u0431\u043e\u0440\u043a\u0438 (build stage), \u043a\u0443\u0434\u0430 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u0441\u0431\u043e\u0440\u043a\u0438. # \u041f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u043f\u043a\u0443, \u043a\u0443\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. # \u041f\u0440\u0438\u043c\u0435\u0440: env DOCKER_BUILDKIT=1 docker build --output out . # https:\/\/docs.docker.com\/engine\/reference\/commandline\/build\/#custom-build-outputs FROM scratch AS export-stage COPY --from=buld_heatmeter \/home\/debian\/heatmeter\/heatmeter .<\/code><\/pre>\n<p>\u0412 \u0441\u0442\u0440\u043e\u043a\u0435 33 \u0438\u0434\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 <code>RUN bash build.sh:<\/code><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  # \u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 libmbus \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u043f\u0430\u043f\u043a\u0443 build. BUILD_DIR=.\/build if [ ! -d \"$BUILD_DIR\" ]; then   REPO_URL=\"https:\/\/github.com\/rscada\/libmbus\"   git clone  $REPO_URL $BUILD_DIR fi  pushd ${BUILD_DIR} # \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c build.sh \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. # 1. \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u041b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441 \u043d\u0430\u0448\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. sed -i 's\/^.*\\&amp;\\&amp; \\.\\\/configure$\/&amp; --enable-shared=no\/' build.sh # 2. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 https:\/\/gcc.gnu.org\/onlinedocs\/gccint\/Configure-Terms.html sed -i 's\/^.*\\&amp;\\&amp; \\.\\\/configure --enable-shared=no$\/&amp; --build=x86_64-ubuntu-linux --host=arm-linux-gnueabihf \/' build.sh  # \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. .\/build.sh popd  # \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. # \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a \u0434\u043b\u044f cgo https:\/\/golang.org\/cmd\/cgo\/. # \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0434 \u043a\u0430\u043a\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443. env CC=\"arm-linux-gnueabihf-gcc\" LD=\"arm-linux-gnueabihf-ld\"  GOOS=linux GOARCH=arm GOARM=5 CGO_ENABLED=1 go build -v  .<\/code><\/pre>\n<p><a class=\"anchor\" name=\"build_heatmeter\" id=\"build_heatmeter\"><\/a><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>env DOCKER_BUILDKIT=1 docker build --output out .<\/code> \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0410\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 out \u0432 \u043d\u0430\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 \u0445\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043a\u0435\u0442 mbus, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0424\u0430\u0439\u043b <code>measurement.go<\/code>  \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <a href=\"#xml_example\" rel=\"noopener noreferrer nofollow\">xml<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>measurement.go<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"go\">package mbus  import ( \t\"encoding\/xml\" \t\"math\" \t\"strconv\" )  type Calories uint16 type CubicMetre float32 type Watt uint16 type CubicMetresPerHour float32 type Celsius uint64 type Seconds uint64  type Measurement struct { \tEnergy        Calories \tVolume        CubicMetre \tPower         Watt \tVolumeFlow    CubicMetresPerHour \tFlowTemp      Celsius \tReturnTemp    Celsius \tOperatingTime Seconds \tErrorTime     Seconds }  func (m *Measurement) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { \tresult := struct { \t\tRecords []struct { \t\t\tValue string `xml:\"Value\"` \t\t} `xml:\"DataRecord\"` \t}{}  \tif err := d.DecodeElement(&amp;result, &amp;start); err != nil { \t\treturn err \t}  \t{ \t\tvalue, err := strconv.ParseFloat(result.Records[0].Value, 32) \t\tif err != nil { \t\t\treturn err \t\t} \t\tm.Energy = Calories(math.Round(value)) \t}  \t{ \t\tvalue, err := strconv.ParseFloat(result.Records[3].Value, 32) \t\tif err != nil { \t\t\treturn err \t\t} \t\tm.Volume = CubicMetre(value) \t}  \t{ \t\tvalue, err := strconv.ParseFloat(result.Records[4].Value, 32) \t\tif err != nil { \t\t\treturn err \t\t} \t\tm.Power = Watt(value) \t}  \t{ \t\tvalue, err := strconv.ParseFloat(result.Records[5].Value, 32) \t\tif err != nil { \t\t\treturn err \t\t} \t\tm.VolumeFlow = CubicMetresPerHour(value) \t}  \t{ \t\tvalue, err := strconv.ParseFloat(result.Records[6].Value, 32) \t\tif err != nil { \t\t\treturn err \t\t} \t\tm.FlowTemp = Celsius(math.Round(value)) \t}  \t{ \t\tvalue, err := strconv.ParseFloat(result.Records[7].Value, 32) \t\tif err != nil { \t\t\treturn err \t\t} \t\tm.ReturnTemp = Celsius(math.Round(value)) \t}  \t{ \t\tvalue, err := strconv.ParseFloat(result.Records[8].Value, 32) \t\tif err != nil { \t\t\treturn err \t\t} \t\tm.OperatingTime = Seconds(value) \t}  \t{ \t\tvalue, err := strconv.ParseFloat(result.Records[9].Value, 32) \t\tif err != nil { \t\t\treturn err \t\t} \t\tm.ErrorTime = Seconds(value) \t} \treturn nil } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0424\u0430\u0439\u043b <code>reader.go<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>Reader<\/code>,  \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 (\u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044f\u043c\u0438). \u041c\u0435\u0442\u043e\u0434\u044b \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c C-\u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 Golang \u0435\u0441\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c <a href=\"https:\/\/golang.org\/cmd\/cgo\/\" rel=\"noopener noreferrer nofollow\">\u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430<\/a>. \u0421 \u043d\u0438\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0443 \u043d\u0430\u0441 \u0438\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430  <code>import \"C\"<\/code>. \u0412 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0434 \u043d\u0430 \u0421\u0438 \u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <a href=\"https:\/\/golang.org\/cmd\/cgo\/\" rel=\"noopener noreferrer nofollow\">#cgo<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430.<\/p>\n<pre><code class=\"go\">package mbus  \/* \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0443, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 mbus. \/\/ \u0422\u0430\u043a\u0436\u0435 \u043b\u0438\u043d\u043a\u0443\u0435\u043c \u0421\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 math, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0443\u0436\u043d\u0430 mbus \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435. #cgo LDFLAGS: -L..\/build\/mbus\/.libs\/ -lmbus -lm  \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b. #cgo CFLAGS:  -I..\/build  \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043d\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438. #include \"mbus\/mbus-serial.h\"  \/\/ C\u0438 \u0443\u043c\u0435\u0435\u0442 \u043d\u0435\u044f\u0432\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 void* \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 mbus_frame*). \/\/ void* \u0432 Go \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u0430\u043a unsafe.Pointer. \/\/ \u0418 \u0442\u0430\u043a \u043a\u0430\u043a \u0432 Go \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c unsafe.Pointer \u0432 C.mbus_frame*, \/\/ \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e-\u043e\u0431\u0435\u0440\u0442\u043a\u0443. mbus_frame* to_frame(void* p){ \treturn p; } *\/ import \"C\"  import ( \t\"bytes\" \t\"encoding\/xml\" \t\"errors\" \t\"fmt\" \t\"unsafe\"  \t\"golang.org\/x\/net\/html\/charset\" )  type Reader struct {   \/\/ \u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.   \/\/ https:\/\/github.com\/rscada\/libmbus\/blob\/master\/mbus\/mbus-protocol-aux.h#L86 \thandle  *C.mbus_handle   \/\/ \u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \taddress C.int }<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>Open<\/code> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440,  \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0440\u0442. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 handshake.<\/p>\n<pre><code class=\"go\">func (r *Reader) Open(device string, primaryAddress uint8, baudrate uint16) error { \tdev := C.CString(device) \tdefer C.free(unsafe.Pointer(dev))    \/\/ \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0440\u0442\u043e\u043c. \tr.handle = C.mbus_context_serial(dev)    \/\/ \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442.   \/\/ https:\/\/en.wikipedia.org\/wiki\/Serial_port#Settings \tif C.mbus_connect(r.handle) != 0 { \t\treturn fmt.Errorf(\"failed to setup connection to M-bus gateway: %s\", device) \t}    \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \tif C.mbus_serial_set_baudrate(r.handle, C.long(baudrate)) != 0 { \t\treturn fmt.Errorf(\"failed to set baud rate: %d\", baudrate) \t}  \tr.address = C.int(primaryAddress)   \/\/ \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 handshake. \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0441 control field SND_NKE (40h).   \/\/ \u0415\u0441\u043b\u0438 slave \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u043b SND_NKE, \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 E5h. \tif C.mbus_send_ping_frame(r.handle, r.address, 1) != 0 { \t\treturn fmt.Errorf(\"failed to setup handshake for address: %d\", primaryAddress) \t} \treturn nil }<\/code><\/pre>\n<p><code>Close<\/code> \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0440\u0442 \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<pre><code class=\"go\">func (r *Reader) Close() error { \tdefer C.mbus_context_free(r.handle) \tif C.mbus_disconnect(r.handle) != 0 { \t\treturn errors.New(\"failed to disconnect\") \t} \treturn nil }<\/code><\/pre>\n<p>\u0418 \u0441\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>ReadData<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443  <code>mbus.Measurement<\/code>.<\/p>\n<pre><code class=\"go\">func (r *Reader) ReadData() (*Measurement, error) { \t\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 control information \u043a\u043e\u0434\u043e\u043c \u0440\u0430\u0432\u043d\u044b\u043c 50h. \t\/\/ \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0431\u0440\u043e\u0441 application layer \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \t\/\/ \u0422\u0430\u043a \u0436\u0435 \u0435\u0441\u0442\u044c \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u2014 application reset subcode. \t\/\/ \u042d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435. \t\/\/ \u0418\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 subcode \u0440\u0430\u0432\u043d\u044b\u043c 50h (instant values) \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \t\/\/ \u0421\u043f\u0438\u0441\u043e\u043a subcod'\u043e\u0432: https:\/\/m-bus.com\/documentation-wired\/06-application-layer#application-reset-subcode- \t\/\/ \u041a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f 50h (instant values) \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0443. \tsubcode := 0x50 \tif C.mbus_send_application_reset_frame(r.handle, r.address, C.int(subcode)) == -1 { \t\treturn nil, fmt.Errorf(\"failed to send reset frame: %s\", C.GoString(C.mbus_error_str())) \t}  \t\/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442\u0432\u0435\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438. \tvar reply C.mbus_frame \tret := C.mbus_recv_frame(r.handle, &amp;reply)  \tif ret == C.MBUS_RECV_RESULT_TIMEOUT { \t\treturn nil, fmt.Errorf(\"failed to get a reply from device: timeout expired\") \t}  \tif C.mbus_frame_type(&amp;reply) != C.MBUS_FRAME_TYPE_ACK { \t\treturn nil, fmt.Errorf(\"unexpected frame type, receiving ACK telegram is failed\") \t}  \t\/\/ \u0414\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b. \tconst maxFrames C.int = 16 \tif C.mbus_sendrecv_request(r.handle, r.address, &amp;reply, maxFrames) != 0 { \t\tC.mbus_frame_free(C.to_frame(reply.next)) \t\treturn nil, fmt.Errorf(\"failed to send\/receive M-Bus request: %s\", C.GoString(C.mbus_error_str())) \t}  \t\/\/ \u0414\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 mbus_frame_data. \tvar frameData C.mbus_frame_data \tif C.mbus_frame_data_parse(&amp;reply, &amp;frameData) != 0 { \t\treturn nil, fmt.Errorf(\"M-bus data parse error: %s\", C.GoString(C.mbus_error_str())) \t}  \t\/\/ \u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 xml \u0444\u043e\u0440\u043c\u0430\u0442. \txmlOutput := C.mbus_frame_data_xml_normalized(&amp;frameData) \tdefer C.free(unsafe.Pointer(xmlOutput)) \tif frameData.data_var.record != nil { \t\tdefer C.mbus_data_record_free(frameData.data_var.record) \t}  \tif xmlOutput == nil { \t\treturn nil, fmt.Errorf(\"failed to generate XML output of the frame: %s\", C.GoString(C.mbus_error_str())) \t}  \t\/\/ \u0414\u0435\u0441\u0435\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c xml \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 mbus.Measurement. \treader := bytes.NewReader([]byte(C.GoString(xmlOutput))) \tdecoder := xml.NewDecoder(reader) \tdecoder.CharsetReader = charset.NewReaderLabel  \tvar measurement Measurement \terr := decoder.Decode(&amp;measurement) \tif err != nil { \t\treturn nil, fmt.Errorf(\"failed to unmarshal XML output: %w\", err) \t}  \treturn &amp;measurement, nil }<\/code><\/pre>\n<p><a class=\"anchor\" name=\"main_go\" id=\"main_go\"><\/a><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b <code>main.go<\/code>, \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.<\/p>\n<pre><code class=\"go\">package main  import ( \t\"fmt\" \t\"heatmeter\/mbus\" \t\"log\" \t\"os\" \t\"strconv\" )  func main() { \tvar device, mbusIDVar, baudrateVar string \tif device = os.Getenv(\"HM_DEVICE\"); device == \"\" { \t\tlog.Fatal(\"HM_DEVICE variable is not set\") \t}  \tif mbusIDVar = os.Getenv(\"HM_MBUS_ID\"); mbusIDVar == \"\" { \t\tlog.Fatal(\"HM_MBUS_ID variable is not set\") \t}  \tmbusID, err := strconv.Atoi(mbusIDVar) \tif err != nil { \t\tlog.Fatalf(\"Wrong mbus ID: %s, %s\", mbusIDVar, err) \t}  \tif baudrateVar = os.Getenv(\"HM_BAUDRATE\"); baudrateVar == \"\" { \t\tlog.Fatal(\"HM_BAUDRATE variable is not set\") \t}  \tbaudrate, err := strconv.Atoi(baudrateVar) \tif err != nil { \t\tlog.Fatalf(\"Wrong baudrate: %s, %s\", baudrateVar, err) \t}  \tvar reader mbus.Reader \terr = reader.Open(device, uint8(mbusID), uint16(baudrate)) \tdefer reader.Close() \tif err != nil { \t\tlog.Fatal(err) \t}  \tmeasurement, err := reader.ReadData() \tif err != nil { \t\tlog.Fatal(\"Unable to get measurement: \", err) \t}  \terrorHoursStr := strconv.Itoa(int(measurement.ErrorTime) \/ 3600) \toperatingDaysStr := strconv.Itoa(int(measurement.OperatingTime) \/ 3600 \/ 24)  \tflowTempStr := strconv.Itoa(int(measurement.FlowTemp)) \treturnTempStr := strconv.Itoa(int(measurement.ReturnTemp)) \tpowerStr := strconv.Itoa(int(measurement.Power))  \tenergyStr := fmt.Sprintf(\"%.3f\", float32(measurement.Energy)\/1000) \tvolumeStr := fmt.Sprintf(\"%.3f\", measurement.Volume) \tvolumeFlowStr := fmt.Sprintf(\"%.3f\", measurement.VolumeFlow\/1000)  \tfmt.Printf(\"\\n Energy: %s, volume: %s, volume flow: %s, power: %s, flow temperature: %s, return temperature: %s, operating days: %s, error hours: %s\", \t\tenergyStr, \t\tvolumeStr, \t\tvolumeFlowStr, \t\tpowerStr, \t\tflowTempStr, \t\treturnTempStr, \t\toperatingDaysStr, \t\terrorHoursStr) }<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u044d\u0442\u043e <a href=\"#build_heatmeter\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439<\/a> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c:<br \/><code>Energy: 12.667, volume: 1476.014, volume flow: 0.000, power: 0, flow temperature: 22, return temperature: 23, operating days: 1330, error hours: 0<br \/><\/code>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u0443 \u043c\u0435\u043d\u044f \u043a\u0440\u0430\u043d \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043c\u0430 \u0438 \u0437\u0430\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438  \u0440\u0430\u0432\u043d\u044b 0. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043d\u044f\u0442\u044c, \u0441\u0438\u0434\u044f \u0437\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u043c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432\u0448\u0438\u0441\u044c \u043a Raspberry Pi \u043f\u043e SSH. \u041d\u043e \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430.<\/p>\n<h2>\u041f\u043e\u0434\u0430\u0447\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0442\u0435\u043f\u043b\u043e\u0441\u0435\u0442\u0435\u0439<\/h2>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0430\u0439\u0442\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u043e\u0432 \u0443\u0441\u043b\u0443\u0433 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u2014 \u043d\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412\u0441\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0443 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 POST \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 POST \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439.<\/p>\n<h2>Telegram-\u0431\u043e\u0442<\/h2>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0438\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/core.telegram.org\/bots\" rel=\"noopener noreferrer nofollow\">Telegram-\u0431\u043e\u0442\u0430<\/a>. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043a\u0435\u0442 logger \u0438 \u0432 \u043d\u0435\u043c \u0444\u0430\u0439\u043b telegram.go, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>io.Writer<\/code> \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <a href=\"https:\/\/golang.org\/pkg\/log\/#SetOutput\" rel=\"noopener noreferrer nofollow\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u044b\u0432\u043e\u0434\u0430<\/a> \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e logger&#8217;a. \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f <a href=\"https:\/\/core.telegram.org\/bots\/api#authorizing-your-bot\" rel=\"noopener noreferrer nofollow\">bot token<\/a> \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0447\u0430\u0442\u0430 \u043c\u0435\u0436\u0434\u0443 \u0432\u0430\u043c\u0438 \u0438 \u0431\u043e\u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u043e\u0433\u043b\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u043e\u0442\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0423\u0437\u043d\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0447\u0430\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u0447\u0430\u0442\u044c \u0447\u0430\u0442 \u0441 <a href=\"https:\/\/telegram.org\/blog\/bot-revolution\" rel=\"noopener noreferrer nofollow\">\u0431\u043e\u0442\u043e\u043c<\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u0432\u0430\u0442\u044c GET <a href=\"https:\/\/telegram.org\/blog\/bot-revolution\" rel=\"noopener noreferrer nofollow\">\u043c\u0435\u0442\u043e\u0434<\/a>. \u041f\u0440\u0438\u043c\u0435\u0440: <a href=\"https:\/\/api.telegram.org\/bot%3Cyour%20bot's%20token%3E\/getUpdates\" rel=\"noopener noreferrer nofollow\">https:\/\/api.telegram.org\/bot&lt;your bot&#8217;s token&gt;\/getUpdates<\/a><\/p>\n<\/li>\n<li>\n<p>\u0412 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0435 result[0].messsage.chat.id \u2014 \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0447\u0430\u0442\u0430.<\/p>\n<\/li>\n<\/ol>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{   \"ok\": true,   \"result\": [     {       \"update_id\": 999999999,       \"message\": {         \"message_id\": 12,         \"from\": {           \"id\": 8888888888,           \"is_bot\": false,           \"first_name\": \"John\",           \"username\": \"john_doe\"         },         \"chat\": {           \"id\": 191191191,           \"first_name\": \"John\",           \"username\": \"john_doe\",           \"type\": \"private\"         },         \"date\": 1624002263,         \"text\": \"\/start\",         \"entities\": [           {             \"offset\": 0,             \"length\": 6,             \"type\": \"bot_command\"           }         ]       }     }   ] }<\/code><\/pre>\n<\/div>\n<\/details>\n<pre><code class=\"go\">package logger  import ( \t\"fmt\" \t\"log\" \t\"os\" \ttgram \"github.com\/go-telegram-bot-api\/telegram-bot-api\/v5\" )  type TelegramLogger struct { \tbot    *tgram.BotAPI \tchatID int64 }  func NewTelegram(token string, chatID int64) (*TelegramLogger, error) { \tbot, err := tgram.NewBotAPI(token) \tif err != nil { \t\treturn nil, err \t} \tbot.Debug = true \tlog.Printf(\"Authorized on account %s\", bot.Self.UserName)  \tlogger := TelegramLogger{bot, chatID} \treturn &amp;logger, nil }  func (t *TelegramLogger) Write(data []byte) (int, error) { \tstr := string(data) \tm := tgram.NewMessage(t.chatID, str)   \/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0447\u0430\u0442 \u0441 \u0431\u043e\u0442\u043e\u043c. \t_, err := t.bot.Send(m)   \/\/ \u0414\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u0432\u043e\u0434\u0430 \u043e\u0448\u0438\u0431\u043e\u043a. \tn, stdErr := os.Stderr.WriteString(str) \treturn n, fmt.Errorf(\"%v: %v\", err, stdErr) }<\/code><\/pre>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&nbsp;<code>main<\/code>&nbsp;\u0432 \u0444\u0430\u0439\u043b\u0435&nbsp;<a href=\"#main_go\" rel=\"noopener noreferrer nofollow\">main.go<\/a>&nbsp;\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e logger&#8217;\u0430.<\/p>\n<pre><code class=\"go\">\tlogger, err := logger.NewTelegram(\"&lt;your bot's token&gt;\", 191191191) \tif err != nil { \t\tlog.Fatal(\"unable to create bot: \", err) \t} \tlog.SetOutput(logger)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 <a href=\"https:\/\/golang.org\/pkg\/log\/#Default\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 logger<\/a>, \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0447\u0430\u0442 \u0441 \u0431\u043e\u0442\u043e\u043c.<\/p>\n<h2>Wi-Fi \u0440\u0435\u043b\u0435<\/h2>\n<p>\u0411\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043d\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c Raspberry Pi \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 24\/7. \u0417\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442, \u0434\u043b\u0438\u0442\u0441\u044f \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 1-5 \u043c\u0438\u043d\u0443\u0442 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u043c\u0435\u0441\u044f\u0446. \u041d\u0430 \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b: <\/p>\n<ol>\n<li>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0431\u044b\u043b\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f <a href=\"https:\/\/www.raspberrypi.org\/forums\/viewtopic.php?f=63&amp;t=138193\" rel=\"noopener noreferrer nofollow\">\u043e \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u043d\u0438\u0438 \u043f\u043b\u0430\u0442<\/a> \u0438 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u0440\u0438 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c uptime&#8217;\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0435\u0432 \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u043c\u0443 \u0441 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Uninterruptible_power_supply\" rel=\"noopener noreferrer nofollow\">UPS<\/a>&#8216;\u043e\u043c.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f Wi-Fi \u0440\u0435\u043b\u0435 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f Sonoff, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u0438\u0442\u0430\u043d\u0438\u0435 (\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435). <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u043f\u043b\u0430\u0442\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Wake-on-LAN\" rel=\"noopener noreferrer nofollow\">WoL<\/a>, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0432\u043e\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u0440\u043e\u0443\u0442\u0435\u0440 (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 Mikrotik), \u0441\u0434\u0435\u043b\u0430\u0432 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043d\u0443\u0436\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445.<\/p>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u043c\u0435\u0442\u043a\u0430 \u043f\u043e \u0432\u044b\u0431\u043e\u0440\u0443 \u0440\u0435\u043b\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0440\u0435\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u043e \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0438\u0437 \u0432\u0438\u0434\u043e\u0432 RPC. \u0423 Sonoff \u044d\u0442\u043e DIY \u0440\u0435\u0436\u0438\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c REST-\u0437\u0430\u043f\u0440\u043e\u0441. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0435\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0435\u043c \u0436\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u0441 \u0440\u043e\u0443\u0442\u0435\u0440\u0430. \u042d\u0442\u043e \u0434\u0430\u0441\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0432\u0430\u0448\u0438 \u043d\u0443\u0436\u0434\u044b. \u041c\u043e\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u044d\u0442\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0438 <a href=\"https:\/\/diyprojects.io\/hack-connected-sonoff-s20-plug-esp-easy-rules\/#.YMx1D5MzbDI\" rel=\"noopener noreferrer nofollow\">\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438<\/a>.<\/p>\n<\/div>\n<\/details>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u0441\u043b\u0443\u0436\u0431\u0443<\/h2>\n<ol>\n<li>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 c \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u043d\u0430 Raspberry Pi:<br \/><code>scp &lt;your build dir&gt;\/out\/heatmeter pi@&lt;your Raspberry IP&gt;:\/home\/pi<\/code><\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 Raspberry Pi \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:<br \/><code>sudo mv heatmeter \/usr\/local\/bin<\/code><\/p>\n<\/li>\n<li>\n<p>\u0412 \u0446\u0435\u043b\u044f\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0441\u043b\u0443\u0436\u0431\u044b \u0431\u0435\u0437 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443:<br \/><code>sudo useradd -r -s \/bin\/false --no-create-home heatmeter<\/code><\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438 \u043f\u0440\u0430\u0432\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<br \/><code>sudo chown heatmeter:heatmeter \/usr\/local\/bin\/heatmeter<\/code><br \/><code>sudo chmod 500 \/usr\/local\/bin\/heatmeter<\/code><\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f <code>\/etc\/systemd\/system\/heatmeter.service<\/code>. <br \/>\u041d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c. <\/p>\n<pre><code class=\"bash\">[Unit] Description=Heatmeter report submitter # \u0416\u0434\u0435\u043c, \u043f\u043e\u043a\u0430 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0442\u0441\u044f \u0441\u0435\u0442\u044c. After=network-online.target # \u0416\u0434\u0435\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0432 \u043b\u043e\u0433\u0430\u0445 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u043e\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. Requires=time-sync.target  [Install] # \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u041e\u0421, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u043d\u0430\u0448\u0430 \u0441\u043b\u0443\u0436\u0431\u0430 # https:\/\/wiki.debian.org\/systemd\/CheatSheet WantedBy=multi-user.target  [Service] Environment=\"HM_DEVICE=\"\/dev\/ttyUSB0\"\" Environment=\"HM_MBUS_ID=12\" Environment=\"HM_BAUDRATE=2400\"  # \u041f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0447\u0435\u0440\u0435\u0437 10 \u043c\u0438\u043d\u0443\u0442. # \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0441\u043f\u0435\u043b\u0430 \u0441\u0435\u0431\u044f \u043f\u043e\u0442\u0443\u0448\u0438\u0442\u044c. # \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0447\u0435\u0440\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b, # \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a Wi-Fi \u0440\u0435\u043b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442 \u043f\u0438\u0442\u0430\u043d\u0438\u0435. ExecStartPre=shutdown -P +10  #\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. ExecStart=\/usr\/local\/bin\/heatmeter<\/code><\/pre>\n<\/li>\n<li>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u0430\u0432\u0430 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<br \/><code>sudo chmod 644 \/etc\/systemd\/system\/heatmeter.service<\/code><\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 daemon-reload, \u0447\u0442\u043e\u0431\u044b systemd \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b \u043d\u0430\u0448\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<br \/><code>systemctl daemon-reload<\/code><\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043d\u0430\u0448\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<br \/><code>systemctl enable heatmeter.service<\/code><\/p>\n<\/li>\n<\/ol>\n<h2>\u042d\u043f\u0438\u043b\u043e\u0433<\/h2>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u043c\u0435\u0441\u044f\u0446 Wi-Fi \u0440\u0435\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c Raspberry Pi. \u041f\u043e\u0441\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u044d\u0442\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0434\u043b\u044f \u043a\u043e\u0433\u043e-\u0442\u043e \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439. \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e <a href=\"https:\/\/github.com\/valentin-naboka\/heatmeter\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>. <\/p>\n<p><em>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b:<\/em><br \/><a href=\"http:\/\/www.rscada.se\/libmbus\/index.php?lang=en\" rel=\"noopener noreferrer nofollow\"><em>http:\/\/www.rscada.se\/libmbus\/index.php?lang=en<\/em><\/a><em><br \/><\/em><a href=\"https:\/\/m-bus.com\/documentation\" rel=\"noopener noreferrer nofollow\"><em>https:\/\/m-bus.com\/documentation<\/em><\/a><\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/554250\/\"> https:\/\/habr.com\/ru\/post\/554250\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<h2>\u041d\u0430\u0447\u0430\u043b\u043e<\/h2>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u044f \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u043f\u043e\u0434\u0430\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430 \u0432 \u043d\u043e\u0432\u043e\u0435 \u0436\u0438\u043b\u044c\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A2%D0%B5%D0%BF%D0%BB%D0%BE%D1%81%D1%87%D1%91%D1%82%D1%87%D0%B8%D0%BA\" rel=\"noopener noreferrer nofollow\">\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043f\u043b\u0430<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0442\u043e\u0436\u0435) \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443 \u0443\u0441\u043b\u0443\u0433 \u0442\u0435\u043f\u043b\u043e\u0432\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0441\u044f\u0446 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0442\u0435\u043f\u043b\u0430 \u0432 \u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u0430\u0431\u0438\u043d\u0435\u0442 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u043b\u043e\u0432\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u041c\u043e\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0435\u043c \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0435 \u0432 \u0444\u0430\u043b\u044c\u0448\u0441\u0442\u0435\u043d\u0435, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0432\u0438\u0437\u0438\u043e\u043d\u043d\u0443\u044e \u0440\u0430\u043c\u043a\u0443. \u0412 \u0446\u0435\u043b\u043e\u043c \u2015 \u044d\u0442\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0415\u0432\u0440\u043e\u043f\u044b \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0430\u0441\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0442\u0435\u043f\u043b\u043e\u0432\u044b\u0445 \u0443\u0441\u043b\u0443\u0433. \u0422\u0430\u043a\u0436\u0435, \u0432 \u043d\u0430\u0448\u0438\u0445 \u0448\u0438\u0440\u043e\u0442\u0430\u0445 \u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BE%D0%B2%D0%BB%D0%B0%D0%B4%D0%B5%D0%BB%D1%8C%D1%86%D0%B5%D0%B2_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BA%D0%B2%D0%B0%D1%80%D1%82%D0%B8%D1%80%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B4%D0%BE%D0%BC%D0%B0\" rel=\"noopener noreferrer nofollow\">\u041e\u0421\u041c\u0414<\/a>, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u043e\u0434\u044a\u0435\u0437\u0434\u0430 \u0438\u043b\u0438 \u0434\u043e\u043c\u0430. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435 \u043c\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u043b\u0430 \u043c\u044b\u0441\u043b\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043a\u0430\u043a \u0437\u0432\u0443\u0447\u0430\u043b \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u0439 \u0441\u043b\u043e\u0433\u0430\u043d IBM:<\/p>\n<blockquote>\n<p>Machines should work; people should think.<\/p>\n<p>\u2015 IBM<\/p>\n<\/blockquote>\n<p><iframe id=\"60c76c566f06c2a29f4b453f\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/60c76c566f06c2a29f4b453f\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/p>\n<h2>\u0411\u043b\u0438\u0436\u0435 \u043a \u0434\u0435\u043b\u0443<\/h2>\n<p>\u041a\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0438\u0447\u044c:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u0437 \u0436\u0435\u043b\u0435\u0437\u0430:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/www.diehl.com\/metering\/en\/products-services\/thermal-energy-metering-\/thermal-energy-metering-product\/sharky-774-compact\/71466\/\" rel=\"noopener noreferrer nofollow\">\u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0442\u0435\u043f\u043b\u0430<\/a> \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 M-Bus<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.raspberrypi.org\/products\/raspberry-pi-2-model-b\/\" rel=\"noopener noreferrer nofollow\">Raspberry Pi 2<\/a> \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 <a href=\"https:\/\/www.raspberrypi.org\/software\/operating-systems\/#raspberry-pi-os-32-bit\" rel=\"noopener noreferrer nofollow\">Raspberry Pi OS<\/a><\/p>\n<\/li>\n<li>\n<p>M-Bus master \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/p>\n<\/li>\n<li>\n<p>Wi-Fi \u0440\u0435\u043b\u0435 Sonoff s20<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0430\u0431\u043e\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435. \u0421\u043b\u0435\u0432\u0430 \u0431\u043b\u043e\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043b\u0435. \u0412 \u0446\u0435\u043d\u0442\u0440\u0435 \u0441\u0430\u043c Raspberry Pi. \u0421\u043f\u0440\u0430\u0432\u0430 M-Bus \u043d\u0430 USB \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0440 (\u0431\u0435\u043b\u044b\u0439 \u0448\u043d\u0443\u0440 \u0438\u0434\u0435\u0442 \u043a \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0443 \u0442\u0435\u043f\u043b\u0430).<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/github.com\/rscada\/libmbus\" rel=\"noopener noreferrer nofollow\">\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443<\/a> \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f M-Bus \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/golang.org\/\" rel=\"noopener noreferrer nofollow\">Golang<\/a><\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c  \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445. \u041f\u0435\u0440\u0432\u0430\u044f \u2015 \u044d\u0442\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430, \u0432\u0442\u043e\u0440\u0430\u044f \u2015  \u043f\u043e\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0442\u0435\u043f\u043b\u043e\u0441\u0435\u0442\u0435\u0439.<\/p>\n<h2>M-Bus<\/h2>\n<p><a href=\"https:\/\/m-bus.com\/documentation\" rel=\"noopener noreferrer nofollow\">M-Bus<\/a> \u2015 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432 \u0442\u0435\u043f\u043b\u0430 \u0438\u043b\u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0443\u0447\u0435\u0442\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0432 \u0415\u0432\u0440\u043e\u043f\u0435. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043a\u0430\u0431\u0435\u043b\u044e \u0438 \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u043e \u043a\u0430\u0431\u0435\u043b\u044e.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438:<\/p>\n<ul>\n<li>\n<p>\u041a \u043e\u0434\u043d\u043e\u043c\u0443 master \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432 (slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432)<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441<\/p>\n<\/li>\n<li>\n<p>\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 12-36 V: \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u00ab0\u00bb \u2015 12..24 V, \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u00ab1\u00bb \u2015 36 V<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0442\u0438\u043f \u043a\u0430\u0431\u0435\u043b\u044f \u2015 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u044b\u0439 (JYStY N*2*0.8 mm). \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432\u0438\u0442\u0443\u044e \u043f\u0430\u0440\u0443 \u0441 \u0441\u0435\u0447\u0435\u043d\u0438\u0435\u043c 0.51 \u043c\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u0443\u0436\u0435 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0442\u044f\u043d\u0443\u0442\u0430 \u0432 \u043f\u043e\u0434\u044a\u0435\u0437\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b M-Bus (\u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432 \u0440\u043e\u043b\u0438 slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430). \u0423 \u043c\u0435\u043d\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a <a href=\"https:\/\/www.diehl.com\/metering\/en\/products-services\/thermal-energy-metering-\/thermal-energy-metering-product\/sharky-774-compact\/71466\/\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439<\/a> \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u044b\u0445\u043e\u0434 \u043f\u0440\u043e\u0432\u043e\u0434\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a.<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"float bordered full-width\"><figcaption>\u0412\u044b\u0445\u043e\u0434 M-Bus<\/figcaption><\/figure>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e M-Bus master-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0449\u0435 \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u0438\u0437 36 V \u0432 5 V.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0432\u0440\u043e\u0434\u0435 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f. \u042f \u043e\u0442\u043a\u0440\u044b\u043b \u043a\u043e\u0440\u043f\u0443\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u0444\u043e\u0442\u043e \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u0421\u0430\u043c\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u043e \u043d\u0430 Aliexpress. \u0421\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0442\u043e\u0432\u0430\u0440 \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0442\u044c. \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u0430\u043c &#171;M-Bus USB Master&#187; \u0434\u0430\u0441\u0442 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0412\u0430\u0436\u043d\u043e: \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e master-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u041f\u043e\u0437\u0436\u0435 \u043c\u043d\u0435 \u043d\u0430 \u0433\u043b\u0430\u0437\u0430 \u043f\u043e\u043f\u0430\u043b\u0430\u0441\u044c <a href=\"https:\/\/www.packom.net\/m-bus-hats\/\" rel=\"noopener noreferrer nofollow\">\u043f\u043b\u0430\u0442\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/a> \u0434\u043b\u044f Raspberry Pi. \u042f \u043d\u0435 \u043c\u043e\u0433\u0443 \u0434\u0430\u0442\u044c \u043e\u0442\u0437\u044b\u0432\u0430 \u043f\u043e \u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0435, \u043d\u043e \u0432\u0432\u0438\u0434\u0443 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0431\u044b \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u043a master-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a Raspberry Pi \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 (\u0443 \u043c\u0435\u043d\u044f \u043d\u0430 <a href=\"https:\/\/www.raspberrypi.org\/software\/operating-systems\/#raspberry-pi-os-32-bit\" rel=\"noopener noreferrer nofollow\">Raspberry Pi OS<\/a> \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \/dev\/ttyUSB0). \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/rscada\/libmbus\" rel=\"noopener noreferrer nofollow\">\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/a> \u0438 cli \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u0435\u0435 \u043e\u0441\u043d\u043e\u0432\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043f\u0440\u0438\u0435\u043c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 M-Bus \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c.<\/p>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a Raspberry Pi \u043f\u043e <a href=\"https:\/\/www.raspberrypi.org\/documentation\/remote-access\/ssh\/\" rel=\"noopener noreferrer nofollow\">SSH<\/a>. \u0418 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u0442\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<ol>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432:<br \/><code>wget https:\/\/github.com\/rscada\/libmbus\/archive\/master.zip<br \/>&amp;&amp; unzip master.zip<br \/>&amp;&amp; cd libmbus-master<\/code><\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0441\u0442\u0430\u0432\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438:<br \/><code>apt-get install build-essential libtool autoconf m4<\/code><\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c:<br \/><code>.\/build.sh<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0435 libmbus-master\/bin \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u044b.  \u0423\u0442\u0438\u043b\u0438\u0442\u0430 mbus-serial-request-data  \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0435, \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c. \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. <\/p>\n<p><a class=\"anchor\" name=\"request_data\" id=\"request_data\"><\/a><\/p>\n<p>\u0412\u044b\u0437\u043e\u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<br \/><code>.\/mbus-serial-request-data -b 2400 \/dev\/ttyUSB0 12<\/code><\/p>\n<p>\u0433\u0434\u0435,<\/p>\n<ul>\n<li>\n<p>-b 2400 \u2015 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u0430\u044f \u0432 \u0431\u043e\u0434\u0430\u0445. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0430\u0448 \u0441\u0447\u0435\u0442\u0447\u0438\u043a, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0432 \u0435\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435. \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u043e 300 \u0438 2400 \u0431\u043e\u0434.  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u043e\u0442 300 \u0434\u043e 9600 \u0431\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p>\/dev\/ttyUSB0 \u2015 \u043f\u0443\u0442\u044c \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a Raspberry Pi.<\/p>\n<\/li>\n<li>\n<p>12 \u2015 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430).<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u0442\u043e\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432 m-bus \u0441\u0435\u0442\u0438. M-Bus \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438: \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 (primary address) \u0438 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 (secondary address). \u0412\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043e\u043d\u0438 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u044f\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1 \u0434\u043e 250 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c) \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <code>mbus-serial-set-address<\/code>. \u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u0448\u0438\u0442 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e (\u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d) \u0438 \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0438\u0436\u0435.<\/p>\n<p><a class=\"anchor\" name=\"secondary_address\" id=\"secondary_address\"><\/a><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"184\" width=\"184\">\n<p><strong>Identification-Nr.<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Manufacturer. (hex.)<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Version (hex.)<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Media (hex.)<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"184\" width=\"184\">\n<p>14491001<\/p>\n<\/td>\n<td>\n<p>1057<\/p>\n<\/td>\n<td>\n<p>01<\/p>\n<\/td>\n<td>\n<p>06 <\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e 1 \u0431\u0430\u0439\u0442 \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0435. \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432 \u0441\u0435\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u0434\u043e 250.<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 FDh (253) &#8212; \u044d\u0442\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f 254 \u0438 255 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443. 251 \u0438 252 \u2015 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0436\u0435 \u043e\u0442 1 \u0434\u043e 250 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. <\/figcaption><\/figure>\n<ol>\n<li>\n<p>Master \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 CI (control information) \u043f\u043e\u043b\u0435\u043c \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 52h \u0438\u043b\u0438 56h, A (address field) \u043f\u043e\u043b\u0435\u043c \u0440\u0430\u0432\u043d\u044b\u043c FDh (253) \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432 \u0442\u0435\u043b\u0435 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>Slave \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0443, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u043e \u0441\u0432\u043e\u0438\u043c, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u00abselected state\u00bb \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 E5h.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 FDh (253) \u0432 A (address field).<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 master \u0438 slave \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430, master \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u00abselected state\u00bb \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 CI \u043f\u043e\u043b\u0435\u043c 40h.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432, \u043d\u043e \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432 \u0441\u0435\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0438\u0437\u0431\u0435\u0436\u0430\u0432 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0415\u0449\u0435 \u043e\u043d \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0435\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u2015 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0438\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430\u043c. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0435\u043c\u0443 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0438\u043b\u0438 \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u043e\u0440\u043f\u0443\u0441\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441, \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e <a href=\"#secondary_address\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u0431\u043b\u0438\u0446\u0435<\/a>. \u0418\u043b\u0438 \u0436\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0443\u0442\u0438\u043b\u0438\u0442.<\/p>\n<p><code>.\/mbus-serial-scan-secondary -b 2400 \/dev\/ttyUSB0<\/code><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434:<br \/>Found a device on secondary address 58740397A511410C [using address mask 5FFFFFFFFFFFFFFF]<\/p>\n<p>\u0417\u043d\u0430\u044f \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 12 (\u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435):<\/p>\n<p><code>.\/mbus-serial-set-address -b 2400 \/dev\/ttyUSB0  58740397A511410C 12<\/code><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434:<br \/>Set primary address of device to 12<\/p>\n<p>\u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443:<\/p>\n<p><code>.\/mbus-serial-scan -b 2400 \/dev\/ttyUSB0<\/code><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434:<br \/>Found a M-Bus device at address 12<\/p>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e, <a href=\"#request_data\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435<\/a> \u0443 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430:<\/p>\n<p><code>.\/mbus-serial-request-data -b 2400 \/dev\/ttyUSB0 12<\/code><\/p>\n<p><a class=\"anchor\" name=\"xml_example\" id=\"xml_example\"><\/a><\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c xml \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435<\/summary>\n<div class=\"spoiler__content\"><a class=\"anchor\" name=\"xml_example\" id=\"xml_example\"><\/a><\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"ISO-8859-1\"?&gt; &lt;MBusData&gt;      &lt;SlaveInformation&gt;         &lt;Id&gt;58630287&lt;\/Id&gt;         &lt;Manufacturer&gt;DME&lt;\/Manufacturer&gt;         &lt;Version&gt;65&lt;\/Version&gt;         &lt;ProductName&gt;&lt;\/ProductName&gt;         &lt;Medium&gt;Heat: Inlet&lt;\/Medium&gt;         &lt;AccessNumber&gt;5&lt;\/AccessNumber&gt;         &lt;Status&gt;00&lt;\/Status&gt;         &lt;Signature&gt;0000&lt;\/Signature&gt;     &lt;\/SlaveInformation&gt;      &lt;DataRecord id=\"0\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Reserved (0x0d)&lt;\/Unit&gt;         &lt;Value&gt;12667&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"1\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Tariff&gt;1&lt;\/Tariff&gt;         &lt;Device&gt;0&lt;\/Device&gt;         &lt;Unit&gt;Reserved (0x0d)&lt;\/Unit&gt;         &lt;Value&gt;0&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"2\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Tariff&gt;2&lt;\/Tariff&gt;         &lt;Device&gt;0&lt;\/Device&gt;         &lt;Unit&gt;Reserved (0x0d)&lt;\/Unit&gt;         &lt;Value&gt;0&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"3\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Volume (m m^3)&lt;\/Unit&gt;         &lt;Value&gt;1476014&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"4\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Power (W)&lt;\/Unit&gt;         &lt;Value&gt;0&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"5\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;Volume flow (m m^3\/h)&lt;\/Unit&gt;         &lt;Value&gt;0&lt;\/Value&gt;         &lt;Timestamp&gt;2021-06-08T11:36:35Z&lt;\/Timestamp&gt;     &lt;\/DataRecord&gt;      &lt;DataRecord id=\"6\"&gt;         &lt;Function&gt;Instantaneous value&lt;\/Function&gt;         &lt;StorageNumber&gt;0&lt;\/StorageNumber&gt;         &lt;Unit&gt;<\/code><\/pre>\n<\/div>\n<\/details>\n<p><\/br><\/br><\/p>\n<\/p>\n<\/li>\n<p><\/br><\/p>\n<\/li>\n<\/ol>\n<p><\/br><\/p>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-325331","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/325331","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=325331"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/325331\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=325331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=325331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=325331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}