diff --git a/dev/404.html b/dev/404.html index ef9c2504..642dd00c 100644 --- a/dev/404.html +++ b/dev/404.html @@ -19,13 +19,13 @@ - +

404

That's a Four-Oh-Four.
Take me home.
- + diff --git a/dev/assets/js/12.d5b3a47e.js b/dev/assets/js/12.ef0ff1bd.js similarity index 79% rename from dev/assets/js/12.d5b3a47e.js rename to dev/assets/js/12.ef0ff1bd.js index d46b363c..9ff2e254 100644 --- a/dev/assets/js/12.d5b3a47e.js +++ b/dev/assets/js/12.ef0ff1bd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{299:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Thing.17f893db.png"},300:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Thing2.01f2ed1a.png"},301:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Thing3.b7cb2b69.png"},302:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Thing4.3284473c.png"},303:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Policy.7db34947.png"},304:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Policy2.8d94ec3f.png"},305:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Policy3.e0c6444a.png"},306:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Certificate.92ac0d8c.png"},307:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Certificate2.de17aacf.png"},308:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Certificate3.db0aa9d1.png"},309:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Attach_Policy.84a712d2.png"},310:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Attach_Policy2.d0fefb57.png"},311:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Attach_Thing.f8ca1bc7.png"},312:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Attach_Thing2.535be9dd.png"},313:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Find_Endpoint.6a2edb1c.png"},314:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_result_MQTT.5772237b.png"},426:function(t,a,s){"use strict";s.r(a);var e=s(14),n=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"integrate-aws-iot"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#integrate-aws-iot"}},[t._v("#")]),t._v(" Integrate AWS IOT")]),t._v(" "),a("h2",{attrs:{id:"create-a-thing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-thing"}},[t._v("#")]),t._v(" Create a thing")]),t._v(" "),a("ul",[a("li",[t._v("From AWS console, search for IOT core")]),t._v(" "),a("li",[t._v("Create a Thing and name it, this name will be used as the OpenMQTTGateway name.")])]),t._v(" "),a("p",[a("img",{attrs:{src:s(299),alt:"AWS tutorial step"}})]),t._v(" "),a("p",[a("img",{attrs:{src:s(300),alt:"AWS tutorial step"}})]),t._v(" "),a("p",[a("img",{attrs:{src:s(301),alt:"AWS tutorial step"}})]),t._v(" "),a("p",[a("img",{attrs:{src:s(302),alt:"AWS tutorial step"}})]),t._v(" "),a("h2",{attrs:{id:"create-a-policy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-policy"}},[t._v("#")]),t._v(" Create a policy")]),t._v(" "),a("p",[a("img",{attrs:{src:s(303),alt:"AWS tutorial step"}})]),t._v(" "),a("p",[a("img",{attrs:{src:s(304),alt:"AWS tutorial step"}})]),t._v(" "),a("p",[a("img",{attrs:{src:s(305),alt:"AWS tutorial step"}})]),t._v(" "),a("ul",[a("li",[t._v("Add this json code to the policy")])]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Version"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2021-11-01"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Statement"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Effect"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Allow"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Action"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iot:Connect"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iot:Publish"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iot:Subscribe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iot:Receive"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"greengrass:Discover"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Resource"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"*"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br")])]),a("h2",{attrs:{id:"create-a-certificate"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-certificate"}},[t._v("#")]),t._v(" Create a certificate")]),t._v(" "),a("ul",[a("li",[t._v("Create a new certificate")])]),t._v(" "),a("p",[a("img",{attrs:{src:s(306),alt:"AWS tutorial step"}}),t._v(" "),a("img",{attrs:{src:s(307),alt:"AWS tutorial step"}})]),t._v(" "),a("ul",[a("li",[t._v("Download certificates and key")])]),t._v(" "),a("p",[a("img",{attrs:{src:s(308),alt:"AWS tutorial step"}})]),t._v(" "),a("h2",{attrs:{id:"attach-policy-with-certificate"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#attach-policy-with-certificate"}},[t._v("#")]),t._v(" Attach Policy with certificate")]),t._v(" "),a("p",[a("img",{attrs:{src:s(309),alt:"AWS tutorial step"}}),t._v(" "),a("img",{attrs:{src:s(310),alt:"AWS tutorial step"}})]),t._v(" "),a("h2",{attrs:{id:"activate-certificate-and-attach-it-to-thing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#activate-certificate-and-attach-it-to-thing"}},[t._v("#")]),t._v(" Activate certificate and attach it to Thing")]),t._v(" "),a("p",[a("img",{attrs:{src:s(311),alt:"AWS tutorial step"}}),t._v(" "),a("img",{attrs:{src:s(312),alt:"AWS tutorial step"}})]),t._v(" "),a("h2",{attrs:{id:"find-aws-endpoint"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#find-aws-endpoint"}},[t._v("#")]),t._v(" Find AWS EndPoint")]),t._v(" "),a("p",[a("img",{attrs:{src:s(313),alt:"AWS tutorial step"}})]),t._v(" "),a("h2",{attrs:{id:"gather-the-information-for-openmqttgateway-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#gather-the-information-for-openmqttgateway-configuration"}},[t._v("#")]),t._v(" Gather the information for OpenMQTTGateway configuration")]),t._v(" "),a("p",[t._v("Now you should have the following information for the OpenMQTTGateway configuration:")]),t._v(" "),a("ul",[a("li",[t._v("Root certificate")]),t._v(" "),a("li",[t._v("Client certificate")]),t._v(" "),a("li",[t._v("Client key")]),t._v(" "),a("li",[t._v("End point url")]),t._v(" "),a("li",[t._v("Gateway name")])]),t._v(" "),a("h2",{attrs:{id:"modify-openmqttgateway-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#modify-openmqttgateway-configuration"}},[t._v("#")]),t._v(" Modify OpenMQTTGateway configuration")]),t._v(" "),a("p",[t._v("With PlatformIO you can directly leverage the environment "),a("code",[t._v("esp32dev-ble-aws")]),t._v(" as an example and modify it following your needs.")]),t._v(" "),a("h2",{attrs:{id:"build-and-upload"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#build-and-upload"}},[t._v("#")]),t._v(" Build and upload")]),t._v(" "),a("h2",{attrs:{id:"connect-to-a-wifi-access-point-see-portal"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#connect-to-a-wifi-access-point-see-portal"}},[t._v("#")]),t._v(" Connect to a WiFi Access point "),a("a",{attrs:{href:"../upload/portal"}},[t._v("see portal")])]),t._v(" "),a("p",[t._v("Enter your credentials and verify that Secure connection is marked.")]),t._v(" "),a("h2",{attrs:{id:"verify-that-you-receive-data-in-aws"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#verify-that-you-receive-data-in-aws"}},[t._v("#")]),t._v(" Verify that you receive data in AWS")]),t._v(" "),a("ul",[a("li",[t._v("Go to things")]),t._v(" "),a("li",[t._v("Click on the thing created")]),t._v(" "),a("li",[t._v("Go to Activity")]),t._v(" "),a("li",[t._v("Click on MQTT Test Client")]),t._v(" "),a("li",[t._v("Subscribe to "),a("code",[t._v("+/#")])])]),t._v(" "),a("p",[t._v("You should see messages coming.")]),t._v(" "),a("p",[a("img",{attrs:{src:s(314),alt:"AWS tutorial step"}})])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{307:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Thing.17f893db.png"},308:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Thing2.01f2ed1a.png"},309:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Thing3.b7cb2b69.png"},310:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Thing4.3284473c.png"},311:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Policy.7db34947.png"},312:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Policy2.8d94ec3f.png"},313:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Policy3.e0c6444a.png"},314:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Certificate.92ac0d8c.png"},315:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Certificate2.de17aacf.png"},316:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Create_Certificate3.db0aa9d1.png"},317:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Attach_Policy.84a712d2.png"},318:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Attach_Policy2.d0fefb57.png"},319:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Attach_Thing.f8ca1bc7.png"},320:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Attach_Thing2.535be9dd.png"},321:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_Find_Endpoint.6a2edb1c.png"},322:function(t,a,s){t.exports=s.p+"assets/img/Integrate_AWS_IOT_result_MQTT.5772237b.png"},427:function(t,a,s){"use strict";s.r(a);var e=s(14),n=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"integrate-aws-iot"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#integrate-aws-iot"}},[t._v("#")]),t._v(" Integrate AWS IOT")]),t._v(" "),a("h2",{attrs:{id:"create-a-thing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-thing"}},[t._v("#")]),t._v(" Create a thing")]),t._v(" "),a("ul",[a("li",[t._v("From AWS console, search for IOT core")]),t._v(" "),a("li",[t._v("Create a Thing and name it, this name will be used as the OpenMQTTGateway name.")])]),t._v(" "),a("p",[a("img",{attrs:{src:s(307),alt:"AWS tutorial step"}})]),t._v(" "),a("p",[a("img",{attrs:{src:s(308),alt:"AWS tutorial step"}})]),t._v(" "),a("p",[a("img",{attrs:{src:s(309),alt:"AWS tutorial step"}})]),t._v(" "),a("p",[a("img",{attrs:{src:s(310),alt:"AWS tutorial step"}})]),t._v(" "),a("h2",{attrs:{id:"create-a-policy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-policy"}},[t._v("#")]),t._v(" Create a policy")]),t._v(" "),a("p",[a("img",{attrs:{src:s(311),alt:"AWS tutorial step"}})]),t._v(" "),a("p",[a("img",{attrs:{src:s(312),alt:"AWS tutorial step"}})]),t._v(" "),a("p",[a("img",{attrs:{src:s(313),alt:"AWS tutorial step"}})]),t._v(" "),a("ul",[a("li",[t._v("Add this json code to the policy")])]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Version"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2021-11-01"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Statement"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Effect"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Allow"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Action"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iot:Connect"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iot:Publish"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iot:Subscribe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iot:Receive"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"greengrass:Discover"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Resource"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"*"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br")])]),a("h2",{attrs:{id:"create-a-certificate"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-certificate"}},[t._v("#")]),t._v(" Create a certificate")]),t._v(" "),a("ul",[a("li",[t._v("Create a new certificate")])]),t._v(" "),a("p",[a("img",{attrs:{src:s(314),alt:"AWS tutorial step"}}),t._v(" "),a("img",{attrs:{src:s(315),alt:"AWS tutorial step"}})]),t._v(" "),a("ul",[a("li",[t._v("Download certificates and key")])]),t._v(" "),a("p",[a("img",{attrs:{src:s(316),alt:"AWS tutorial step"}})]),t._v(" "),a("h2",{attrs:{id:"attach-policy-with-certificate"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#attach-policy-with-certificate"}},[t._v("#")]),t._v(" Attach Policy with certificate")]),t._v(" "),a("p",[a("img",{attrs:{src:s(317),alt:"AWS tutorial step"}}),t._v(" "),a("img",{attrs:{src:s(318),alt:"AWS tutorial step"}})]),t._v(" "),a("h2",{attrs:{id:"activate-certificate-and-attach-it-to-thing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#activate-certificate-and-attach-it-to-thing"}},[t._v("#")]),t._v(" Activate certificate and attach it to Thing")]),t._v(" "),a("p",[a("img",{attrs:{src:s(319),alt:"AWS tutorial step"}}),t._v(" "),a("img",{attrs:{src:s(320),alt:"AWS tutorial step"}})]),t._v(" "),a("h2",{attrs:{id:"find-aws-endpoint"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#find-aws-endpoint"}},[t._v("#")]),t._v(" Find AWS EndPoint")]),t._v(" "),a("p",[a("img",{attrs:{src:s(321),alt:"AWS tutorial step"}})]),t._v(" "),a("h2",{attrs:{id:"gather-the-information-for-openmqttgateway-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#gather-the-information-for-openmqttgateway-configuration"}},[t._v("#")]),t._v(" Gather the information for OpenMQTTGateway configuration")]),t._v(" "),a("p",[t._v("Now you should have the following information for the OpenMQTTGateway configuration:")]),t._v(" "),a("ul",[a("li",[t._v("Root certificate")]),t._v(" "),a("li",[t._v("Client certificate")]),t._v(" "),a("li",[t._v("Client key")]),t._v(" "),a("li",[t._v("End point url")]),t._v(" "),a("li",[t._v("Gateway name")])]),t._v(" "),a("h2",{attrs:{id:"modify-openmqttgateway-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#modify-openmqttgateway-configuration"}},[t._v("#")]),t._v(" Modify OpenMQTTGateway configuration")]),t._v(" "),a("p",[t._v("With PlatformIO you can directly leverage the environment "),a("code",[t._v("esp32dev-ble-aws")]),t._v(" as an example and modify it following your needs.")]),t._v(" "),a("h2",{attrs:{id:"build-and-upload"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#build-and-upload"}},[t._v("#")]),t._v(" Build and upload")]),t._v(" "),a("h2",{attrs:{id:"connect-to-a-wifi-access-point-see-portal"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#connect-to-a-wifi-access-point-see-portal"}},[t._v("#")]),t._v(" Connect to a WiFi Access point "),a("a",{attrs:{href:"../upload/portal"}},[t._v("see portal")])]),t._v(" "),a("p",[t._v("Enter your credentials and verify that Secure connection is marked.")]),t._v(" "),a("h2",{attrs:{id:"verify-that-you-receive-data-in-aws"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#verify-that-you-receive-data-in-aws"}},[t._v("#")]),t._v(" Verify that you receive data in AWS")]),t._v(" "),a("ul",[a("li",[t._v("Go to things")]),t._v(" "),a("li",[t._v("Click on the thing created")]),t._v(" "),a("li",[t._v("Go to Activity")]),t._v(" "),a("li",[t._v("Click on MQTT Test Client")]),t._v(" "),a("li",[t._v("Subscribe to "),a("code",[t._v("+/#")])])]),t._v(" "),a("p",[t._v("You should see messages coming.")]),t._v(" "),a("p",[a("img",{attrs:{src:s(322),alt:"AWS tutorial step"}})])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/13.ddbd1897.js b/dev/assets/js/13.e580c211.js similarity index 80% rename from dev/assets/js/13.ddbd1897.js rename to dev/assets/js/13.e580c211.js index 3b7b0e4f..b1f292f1 100644 --- a/dev/assets/js/13.ddbd1897.js +++ b/dev/assets/js/13.e580c211.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{359:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-ip.8d63f8c6.png"},360:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding.4a6275c5.png"},361:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding2.266324d8.png"},362:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding3.506b08c5.png"},363:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding4.3be7eff4.png"},364:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding5.8c71ca36.png"},365:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding6.48cd3dee.png"},366:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-jinja.270ad9f2.png"},367:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-things.b9bcbb97.png"},368:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-things2.550b24da.png"},369:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-things3.e83eb23c.png"},370:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-things4.45af5919.png"},371:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-things5.bf15e337.png"},372:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt.719d8beb.png"},431:function(t,e,n){"use strict";n.r(e);var a=n(14),i=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"integrate-openhab-3-4"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#integrate-openhab-3-4"}},[t._v("#")]),t._v(" Integrate OPENHAB 3/4")]),t._v(" "),e("p",[t._v("This tutorial will show how to integrate the BLE gateway to OpenHAB 3 or 4 leveraging the auto discovery functionality.\nAfter this tutorial, you should see your Bluetooth Low Energy devices in OpenHAB without any file based manual configuration.")]),t._v(" "),e("h2",{attrs:{id:"prerequisites"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),e("ul",[e("li",[t._v("OpenHAB 3.3 or higher")]),t._v(" "),e("li",[t._v("MQTT broker installed with or without authentication")]),t._v(" "),e("li",[t._v('A location defined in the "Model" section under "Settings"')])]),t._v(" "),e("h2",{attrs:{id:"ip-address-if-your-broker-is-installed-on-the-same-server-as-openhab"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ip-address-if-your-broker-is-installed-on-the-same-server-as-openhab"}},[t._v("#")]),t._v(" IP address (if your broker is installed on the same server as OpenHAB)")]),t._v(" "),e("p",[t._v("The goal is to disable the IPv6 address of the broker server, so that the gateway can connect through IPv4.")]),t._v(" "),e("ol",[e("li",[t._v("From the Administration click on Settings")]),t._v(" "),e("li",[t._v("Click on Network Settings")]),t._v(" "),e("li",[t._v("Click on Show Advanced")]),t._v(" "),e("li",[t._v("Disable IPv6")]),t._v(" "),e("li",[t._v("Click on Save")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(359),alt:"OpenHAB integration"}})]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),e("p",[t._v("If the broker is installed on another server you will also need to configure it with an IPv4 address.")])]),t._v(" "),e("h2",{attrs:{id:"install-the-mqtt-binding"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-the-mqtt-binding"}},[t._v("#")]),t._v(" Install the MQTT binding")]),t._v(" "),e("ol",[e("li",[t._v("From the Administration click on Settings")]),t._v(" "),e("li",[t._v("Click on Bindings")]),t._v(" "),e("li",[t._v("Install the MQTT binding (you can search at the bottom right)")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(360),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"4"}},[e("li",[t._v("Once installed click on Things under Settings")]),t._v(" "),e("li",[t._v("Click on the + at the bottom right")]),t._v(" "),e("li",[t._v("Click on MQTT Binding")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(361),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"7"}},[e("li",[t._v("Click on MQTT broker")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(362),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"8"}},[e("li",[t._v('Enter for the "Broker Hostname/IP" field, the IP address of your broker, if it is installed on the same server you can enter '),e("code",[t._v("localhost")])])]),t._v(" "),e("p",[e("img",{attrs:{src:n(363),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"9"}},[e("li",[t._v('Click on "Show Advanced" if your broker has authentication activated, if not you can go to step 11')]),t._v(" "),e("li",[t._v("Enter the broker credentials: username and password")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(364),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"11"}},[e("li",[t._v('Click on Create Thing at the bottom, you should see your MQTT Broker in the Things list with the status "online"')])]),t._v(" "),e("p",[e("img",{attrs:{src:n(365),alt:"OpenHAB integration"}})]),t._v(" "),e("p",[t._v("Bravo👏, second step done! Now let's add the Jinja transformation service.")]),t._v(" "),e("h2",{attrs:{id:"install-jinja-and-jsonpath-transformations"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-jinja-and-jsonpath-transformations"}},[t._v("#")]),t._v(" Install Jinja and JSONPath Transformations")]),t._v(" "),e("ol",[e("li",[t._v("From the Administration click on Settings")]),t._v(" "),e("li",[t._v("Click on Bindings")]),t._v(" "),e("li",[t._v("Install Jinja Transformation (you can search at the bottom right)")]),t._v(" "),e("li",[t._v("Install JSONPath Transformation")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(366),alt:"OpenHAB integration"}})]),t._v(" "),e("p",[t._v("Second step done!")]),t._v(" "),e("h2",{attrs:{id:"upload-openmqttgateway-to-an-esp32"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upload-openmqttgateway-to-an-esp32"}},[t._v("#")]),t._v(" Upload OpenMQTTGateway to an ESP32")]),t._v(" "),e("p",[e("RouterLink",{attrs:{to:"/upload/web-install.html"}},[t._v("Upload OpenMQTTGateway from the web")]),t._v(" by selecting the environment corresponding to your need.")],1),t._v(" "),e("p",[t._v("Or use another upload method from the Upload section.")]),t._v(" "),e("h2",{attrs:{id:"configure-openmqttgateway-from-the-web-portal"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configure-openmqttgateway-from-the-web-portal"}},[t._v("#")]),t._v(" Configure OpenMQTTGateway from the web portal")]),t._v(" "),e("p",[e("RouterLink",{attrs:{to:"/upload/portal.html"}},[t._v("Wifi and MQTT configuration")])],1),t._v(" "),e("p",[t._v("Or use another upload method from the Upload section that requires credentials before the build.")]),t._v(" "),e("p",[t._v("You should see the gateway connected to your broker by checking with an MQTT client like MQTT Explorer.")]),t._v(" "),e("h2",{attrs:{id:"adding-the-things"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#adding-the-things"}},[t._v("#")]),t._v(" Adding the things")]),t._v(" "),e("ol",[e("li",[t._v('From the Administration click on "Things" under "Settings", you should see a number in the INBOX button')])]),t._v(" "),e("p",[e("img",{attrs:{src:n(367),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"2"}},[e("li",[t._v("Click on INBOX, you should see your BLE devices and the gateway")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(368),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"3"}},[e("li",[t._v('Click on a device, a pop up "Add as Thing" should appear')]),t._v(" "),e("li",[t._v("Rename it if you need, and click OK, repeat for each Thing discovered. The devices should appears as online progressively.")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(369),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"5"}},[e("li",[t._v("Click on Model")]),t._v(" "),e("li",[t._v("Select the location of where you want to create the Equipment")]),t._v(" "),e("li",[t._v('Click on "Create Equipment from Thing"')]),t._v(" "),e("li",[t._v("Click on Thing")]),t._v(" "),e("li",[t._v("Select a Thing")]),t._v(" "),e("li",[t._v("Rename your Equipment if you need")]),t._v(" "),e("li",[t._v("Select the Channels")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(370),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"12"}},[e("li",[t._v('Click on "Add to Model"')]),t._v(" "),e("li",[t._v("Go to Model, if you unfold your location and Equipment you should be able to see values")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(371),alt:"OpenHAB integration"}})]),t._v(" "),e("p",[t._v("Congratulation🎉! You were able to get data from your BLE sensors into OpenHAB. You can now add the others and use the data to build pages, leverage rules and enjoy all the function of your Home Automation controller with BLE devices.")]),t._v(" "),e("p",[e("img",{attrs:{src:n(372),alt:"OpenHAB integration"}})])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{349:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-ip.8d63f8c6.png"},350:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding.4a6275c5.png"},351:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding2.266324d8.png"},352:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding3.506b08c5.png"},353:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding4.3be7eff4.png"},354:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding5.8c71ca36.png"},355:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-binding6.48cd3dee.png"},356:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-jinja.270ad9f2.png"},357:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-things.b9bcbb97.png"},358:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-things2.550b24da.png"},359:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-things3.e83eb23c.png"},360:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-things4.45af5919.png"},361:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt-things5.bf15e337.png"},362:function(t,e,n){t.exports=n.p+"assets/img/OpenMQTTGateway-OpenHAB-Theengs-mqtt.719d8beb.png"},431:function(t,e,n){"use strict";n.r(e);var a=n(14),i=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"integrate-openhab-3-4"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#integrate-openhab-3-4"}},[t._v("#")]),t._v(" Integrate OPENHAB 3/4")]),t._v(" "),e("p",[t._v("This tutorial will show how to integrate the BLE gateway to OpenHAB 3 or 4 leveraging the auto discovery functionality.\nAfter this tutorial, you should see your Bluetooth Low Energy devices in OpenHAB without any file based manual configuration.")]),t._v(" "),e("h2",{attrs:{id:"prerequisites"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),e("ul",[e("li",[t._v("OpenHAB 3.3 or higher")]),t._v(" "),e("li",[t._v("MQTT broker installed with or without authentication")]),t._v(" "),e("li",[t._v('A location defined in the "Model" section under "Settings"')])]),t._v(" "),e("h2",{attrs:{id:"ip-address-if-your-broker-is-installed-on-the-same-server-as-openhab"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ip-address-if-your-broker-is-installed-on-the-same-server-as-openhab"}},[t._v("#")]),t._v(" IP address (if your broker is installed on the same server as OpenHAB)")]),t._v(" "),e("p",[t._v("The goal is to disable the IPv6 address of the broker server, so that the gateway can connect through IPv4.")]),t._v(" "),e("ol",[e("li",[t._v("From the Administration click on Settings")]),t._v(" "),e("li",[t._v("Click on Network Settings")]),t._v(" "),e("li",[t._v("Click on Show Advanced")]),t._v(" "),e("li",[t._v("Disable IPv6")]),t._v(" "),e("li",[t._v("Click on Save")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(349),alt:"OpenHAB integration"}})]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),e("p",[t._v("If the broker is installed on another server you will also need to configure it with an IPv4 address.")])]),t._v(" "),e("h2",{attrs:{id:"install-the-mqtt-binding"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-the-mqtt-binding"}},[t._v("#")]),t._v(" Install the MQTT binding")]),t._v(" "),e("ol",[e("li",[t._v("From the Administration click on Settings")]),t._v(" "),e("li",[t._v("Click on Bindings")]),t._v(" "),e("li",[t._v("Install the MQTT binding (you can search at the bottom right)")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(350),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"4"}},[e("li",[t._v("Once installed click on Things under Settings")]),t._v(" "),e("li",[t._v("Click on the + at the bottom right")]),t._v(" "),e("li",[t._v("Click on MQTT Binding")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(351),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"7"}},[e("li",[t._v("Click on MQTT broker")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(352),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"8"}},[e("li",[t._v('Enter for the "Broker Hostname/IP" field, the IP address of your broker, if it is installed on the same server you can enter '),e("code",[t._v("localhost")])])]),t._v(" "),e("p",[e("img",{attrs:{src:n(353),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"9"}},[e("li",[t._v('Click on "Show Advanced" if your broker has authentication activated, if not you can go to step 11')]),t._v(" "),e("li",[t._v("Enter the broker credentials: username and password")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(354),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"11"}},[e("li",[t._v('Click on Create Thing at the bottom, you should see your MQTT Broker in the Things list with the status "online"')])]),t._v(" "),e("p",[e("img",{attrs:{src:n(355),alt:"OpenHAB integration"}})]),t._v(" "),e("p",[t._v("Bravo👏, second step done! Now let's add the Jinja transformation service.")]),t._v(" "),e("h2",{attrs:{id:"install-jinja-and-jsonpath-transformations"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-jinja-and-jsonpath-transformations"}},[t._v("#")]),t._v(" Install Jinja and JSONPath Transformations")]),t._v(" "),e("ol",[e("li",[t._v("From the Administration click on Settings")]),t._v(" "),e("li",[t._v("Click on Bindings")]),t._v(" "),e("li",[t._v("Install Jinja Transformation (you can search at the bottom right)")]),t._v(" "),e("li",[t._v("Install JSONPath Transformation")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(356),alt:"OpenHAB integration"}})]),t._v(" "),e("p",[t._v("Second step done!")]),t._v(" "),e("h2",{attrs:{id:"upload-openmqttgateway-to-an-esp32"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upload-openmqttgateway-to-an-esp32"}},[t._v("#")]),t._v(" Upload OpenMQTTGateway to an ESP32")]),t._v(" "),e("p",[e("RouterLink",{attrs:{to:"/upload/web-install.html"}},[t._v("Upload OpenMQTTGateway from the web")]),t._v(" by selecting the environment corresponding to your need.")],1),t._v(" "),e("p",[t._v("Or use another upload method from the Upload section.")]),t._v(" "),e("h2",{attrs:{id:"configure-openmqttgateway-from-the-web-portal"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configure-openmqttgateway-from-the-web-portal"}},[t._v("#")]),t._v(" Configure OpenMQTTGateway from the web portal")]),t._v(" "),e("p",[e("RouterLink",{attrs:{to:"/upload/portal.html"}},[t._v("Wifi and MQTT configuration")])],1),t._v(" "),e("p",[t._v("Or use another upload method from the Upload section that requires credentials before the build.")]),t._v(" "),e("p",[t._v("You should see the gateway connected to your broker by checking with an MQTT client like MQTT Explorer.")]),t._v(" "),e("h2",{attrs:{id:"adding-the-things"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#adding-the-things"}},[t._v("#")]),t._v(" Adding the things")]),t._v(" "),e("ol",[e("li",[t._v('From the Administration click on "Things" under "Settings", you should see a number in the INBOX button')])]),t._v(" "),e("p",[e("img",{attrs:{src:n(357),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"2"}},[e("li",[t._v("Click on INBOX, you should see your BLE devices and the gateway")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(358),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"3"}},[e("li",[t._v('Click on a device, a pop up "Add as Thing" should appear')]),t._v(" "),e("li",[t._v("Rename it if you need, and click OK, repeat for each Thing discovered. The devices should appears as online progressively.")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(359),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"5"}},[e("li",[t._v("Click on Model")]),t._v(" "),e("li",[t._v("Select the location of where you want to create the Equipment")]),t._v(" "),e("li",[t._v('Click on "Create Equipment from Thing"')]),t._v(" "),e("li",[t._v("Click on Thing")]),t._v(" "),e("li",[t._v("Select a Thing")]),t._v(" "),e("li",[t._v("Rename your Equipment if you need")]),t._v(" "),e("li",[t._v("Select the Channels")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(360),alt:"OpenHAB integration"}})]),t._v(" "),e("ol",{attrs:{start:"12"}},[e("li",[t._v('Click on "Add to Model"')]),t._v(" "),e("li",[t._v("Go to Model, if you unfold your location and Equipment you should be able to see values")])]),t._v(" "),e("p",[e("img",{attrs:{src:n(361),alt:"OpenHAB integration"}})]),t._v(" "),e("p",[t._v("Congratulation🎉! You were able to get data from your BLE sensors into OpenHAB. You can now add the others and use the data to build pages, leverage rules and enjoy all the function of your Home Automation controller with BLE devices.")]),t._v(" "),e("p",[e("img",{attrs:{src:n(362),alt:"OpenHAB integration"}})])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/16.e4185a57.js b/dev/assets/js/16.74c01ec1.js similarity index 98% rename from dev/assets/js/16.e4185a57.js rename to dev/assets/js/16.74c01ec1.js index a4f65fe5..fc402e08 100644 --- a/dev/assets/js/16.e4185a57.js +++ b/dev/assets/js/16.74c01ec1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{276:function(t,s,a){t.exports=a.p+"assets/img/OpenMQTTGateway-Configuration-Home-Assistant.531a7826.png"},277:function(t,s,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Home_Assistant_MQTT_discovery.8980f020.png"},315:function(t,s,a){t.exports=a.p+"assets/img/OpenMQTTGateway-Configuration-Home-Assistant-Discovery-Integration.15338e07.png"},316:function(t,s,a){t.exports=a.p+"assets/img/OpenMQTTGateway_auto_discovery_Gateway_Home_Assistant.79982abd.gif"},317:function(t,s,a){t.exports=a.p+"assets/img/OpenMQTTGateway_auto_discovery_BLE_Sensor_Home_Assistant.ad3bc9c2.gif"},318:function(t,s,a){t.exports=a.p+"assets/img/HASS-RF-DeviceTrigger.8d14f498.png"},319:function(t,s,a){t.exports=a.p+"assets/img/HASS-RF-Trigger-example.6dd53087.png"},320:function(t,s,a){t.exports=a.p+"assets/img/HASS-RF-MQTTSensor.62ca0325.png"},321:function(t,s,a){t.exports=a.p+"assets/img/HASS-RF-Sensor-example.2909340e.png"},322:function(t,s){t.exports="data:image/png;base64,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"},427:function(t,s,a){"use strict";a.r(s);var e=a(14),n=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"integrate-home-assistant"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#integrate-home-assistant"}},[t._v("#")]),t._v(" Integrate Home Assistant")]),t._v(" "),s("p",[t._v("Home Assistant provide the "),s("a",{attrs:{href:"https://www.home-assistant.io/integrations/mqtt/",target:"_blank",rel:"noopener noreferrer"}},[t._v("MQTT integration"),s("OutboundLink")],1),t._v(" and through this integration it is possible to exploit and manage the messages published by OpenMQTTGateway.")]),t._v(" "),s("p",[t._v("Once this integration on home assistant is configured with the same MQTT broker, it is possible to create devices manually or through the autodiscovery function.")]),t._v(" "),s("h2",{attrs:{id:"automatic-integration-with-auto-discovery"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#automatic-integration-with-auto-discovery"}},[t._v("#")]),t._v(" Automatic integration with Auto discovery")]),t._v(" "),s("p",[t._v("From Home Assistant site")]),t._v(" "),s("blockquote",[s("p",[t._v("The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. The configuration is done on the device itself and the topic used by the device.")])]),t._v(" "),s("p",[t._v("On OpenMQTTGateway the Home Assistant discovery is enabled by default on all binaries and platformio configurations. Here are a few tips for activating discovery on Home Assistant, but for detailed configuration please refer to the Home Assistant website.")]),t._v(" "),s("p",[t._v("Enable discovery on your MQTT integration in HASS (activated per default).")]),t._v(" "),s("p",[s("img",{attrs:{src:a(315),alt:"Home Assistant Auto Discovery"}})]),t._v(" "),s("p",[t._v("The gateway will need an MQTT username and password, you have to create a new user (recommended) into Home Assistant->Configuration->Users (available in admin mode) or use an existing username/pwd combination (not recommended). This user doesn't need to be an administrator.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(276),alt:"Home Assistant Auto Discovery"}})]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),s("p",[t._v("The max size of the username and password is 64 characters.")])]),t._v(" "),s("p",[t._v("OMG will use the auto discovery functionality of home assistant to create gateway and sensors into your HASS instance automatically.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(316),alt:"Home Assistant Auto Discovery"}})]),t._v(" "),s("p",[s("img",{attrs:{src:a(317),alt:"Home Assistant Auto Discovery"}})]),t._v(" "),s("p",[s("img",{attrs:{src:a(277),alt:"Home Assistant Auto Discovery"}})]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("INFO")]),t._v(" "),s("p",[t._v("The Bluetooth and the RTL_433 gateway will automatically create devices and entities, the RF gateway will create DeviceTrigger.\nThe OpenMQTTGateway will also be available as a device to monitor its parameters and control it. The sensors (DHT for example) and actuators (relays) are attached to the gateway.")]),t._v(" "),s("p",[t._v("On first and subsequent startups, auto discovery will start. If you want to prevent this from happening, be sure to manually turn off auto discovery, either by using the UI in Home Assistant, or by publishing to the home/"),s("gatewayname",[t._v("/commands/MQTTtoSYS/config topic.\n30 minutes after its activation the auto discovery will be automatically deactivated, you can reactivate it from the gateway controls.\nSome devices may require a button push or motion/contact event to trigger a message and generate the auto discovery.")])],1)]),t._v(" "),s("h3",{attrs:{id:"rtl-433-auto-discovery-specificity"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#rtl-433-auto-discovery-specificity"}},[t._v("#")]),t._v(" RTL_433 auto discovery specificity")]),t._v(" "),s("p",[t._v("Even if the RTL_433 gateway will create automatically the devices and entities, you may lose the link to them when you change the batteries. This is proper to the RF devices. In this case new device and entities will be created. You may bypass this by creating entities through manual configuration that filter following the device model and other parameters and don't take into account the id.\nExample:")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"+/+/RTL_433toMQTT/WS2032/+"')]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("instead of")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"+/+/RTL_433toMQTT/WS2032/47998"')]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("Note also that the sensor may leverage channels, types or subtypes, they can be used in the filtering\nExample:\nIn the example below 9 is the "),s("code",[t._v("subtype")]),t._v(" and 1 is the "),s("code",[t._v("channel")])]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"+/+/RTL_433toMQTT/Prologue-TH/9/1/+"')]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("instead of")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"+/+/RTL_433toMQTT/Prologue-TH/9/1/215"')]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("Alternatively the rssi signal could be used also.")]),t._v(" "),s("h3",{attrs:{id:"rf-rcswitch-based-gateway-auto-discovery-specificity"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#rf-rcswitch-based-gateway-auto-discovery-specificity"}},[t._v("#")]),t._v(" RF (RCSwitch based gateway) Auto discovery specificity")]),t._v(" "),s("p",[t._v("With OpenMQTTGateway "),s("RouterLink",{attrs:{to:"/setitup/rf.html"}},[t._v("configured to receive RF signals")]),t._v(" messages are transmitted accordingly.")],1),t._v(" "),s("p",[t._v("As indicated in the "),s("RouterLink",{attrs:{to:"/use/rf.html#rcswitch-based-gateway"}},[t._v("RCSwitch based gateway")]),t._v(", it is possible to receive a pulse each time the sensor detects a signal. With auto-discovery enabled, you can configure two types of entities in Home Assistant to handle RF signals:")],1),t._v(" "),s("ol",[s("li",[t._v("An "),s("a",{attrs:{href:"https://www.home-assistant.io/integrations/device_trigger.mqtt/",target:"_blank",rel:"noopener noreferrer"}},[t._v("MQTT Device Trigger"),s("OutboundLink")],1),t._v(" which allows actions to be triggered when a specific RF signal is received.")]),t._v(" "),s("li",[t._v("An "),s("a",{attrs:{href:"https://www.home-assistant.io/integrations/sensor.mqtt/",target:"_blank",rel:"noopener noreferrer"}},[t._v("MQTT Sensor"),s("OutboundLink")],1),t._v("\nwhich stores the received RF data as a sensor value.")])]),t._v(" "),s("p",[t._v("Below are some examples of both configurations.")]),t._v(" "),s("h4",{attrs:{id:"example-a-rf-as-mqtt-device-trigger"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-a-rf-as-mqtt-device-trigger"}},[t._v("#")]),t._v(" Example A - RF as MQTT Device Trigger")]),t._v(" "),s("p",[t._v("If the following parameters are enabled in OpenMQTTGateway:")]),t._v(" "),s("ul",[s("li",[t._v('ZgatewayRF="RF"')]),t._v(" "),s("li",[t._v("valueAsATopic=true")]),t._v(" "),s("li",[t._v("HADiscovery=true")]),t._v(" "),s("li",[t._v("RF_on_HAS_as_DeviceTrigger=true")]),t._v(" "),s("li",[t._v("RF_on_HAS_as_MQTTSensor=false")])]),t._v(" "),s("p",[t._v("Then, each time an RF signal is received by OpenMQTTGateway, two messages are sent to the MQTT broker:")]),t._v(" "),s("ol",[s("li",[t._v("A device trigger announcement (used by Home Assistant to recognize the trigger).")]),t._v(" "),s("li",[t._v("The RF signal data on the corresponding MQTT topic.")])]),t._v(" "),s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('...\nN: [ OMG->MQTT ] topic: homeassistant/device_automation/246F287AF0C4/15524904/config msg: {"automation_type":"trigger","platform ":"device_automation","type":"Received","subtype":"RF-15524904","device":{"configuration_url":"http://192.168.2.150/","connections":[["mac","246F287AF0C4"]],"identifiers":["246F287AF0C4"],"mf":"OMG_community","mdl":"[\\"WebUI\\",\\"RF\\"]","name":"OMG_DEVELOPMENT","sw":"1.8.0-o"},"value_template":"{{trigger.value.raw}}","topic":"home/OMG_DEVELOPMENT/433toMQTT/15524904"}\nT: Dequeue JSON\nN: [ OMG->MQTT ] topic: home/OMG_DEVELOPMENT/433toMQTT/15524904 msg: {"value":15524904,"protocol":1,"length":24,"delay":368,"tre_state":"-","binary":"111011001110010000101000","raw":"11427,1042,407,1039,417,1027,430,302,1148,1019,438,1015,440,295,1152,301,1153,1014,442,1012,441,1008,445,291,1160,293,1158,1011,444,292,1156,296,1157,296,1157,298,1154,1011,442,295,1153,1013,443,293,1157,295,1154,300"}\n...\n')])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br")])]),s("p",[t._v("These messages allow Home Assistant to recognize and integrate the RF signal as a device trigger.\n"),s("img",{attrs:{src:a(318),alt:"MQTTExplorer Show Topic"}}),t._v(" "),s("em",[t._v("Example of a detected RF device trigger in Home Assistant: Green shows the real message, Yellow shows the device trigger configuration")])]),t._v(" "),s("p",[t._v("Once this process is completed, Home Assistant detects a new trigger associated with the OpenMQTTGateway device and linked to the received RF signal value.\nThis means that Home Assistant can now react to the received RF signal as an automation trigger.")]),t._v(" "),s("p",[t._v("Example of a detected RF trigger in Home Assistant:")]),t._v(" "),s("p",[s("img",{attrs:{src:a(319),alt:"MQTTExplorer Show Topic"}}),t._v(" "),s("em",[t._v("Example of a detected RF trigger in Home Assistant")])]),t._v(" "),s("h4",{attrs:{id:"example-b-rf-as-mqtt-sensor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-b-rf-as-mqtt-sensor"}},[t._v("#")]),t._v(" Example B - RF As MQTT Sensor")]),t._v(" "),s("p",[t._v("If the following parameters are enabled in OpenMQTTGateway:")]),t._v(" "),s("ul",[s("li",[t._v('ZgatewayRF="RF"')]),t._v(" "),s("li",[t._v("HADiscovery=true")]),t._v(" "),s("li",[t._v("RF_on_HAS_as_DeviceTrigger=false")]),t._v(" "),s("li",[t._v("RF_on_HAS_as_MQTTSensor=true")])]),t._v(" "),s("p",[t._v("During any discovery round, a SYS message is sent, setting the MQTT Sensor as a sensor of the OpenMQTTGateway device.")]),t._v(" "),s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('...\nN: [ OMG->MQTT ] topic: homeassistant/sensor/246F287AF0C4-gatewayRF/config msg: {"stat_t":"home/OMG_DEVELOPMENT/433toMQTT/#","avty_t":"home/OMG_DEVELOPMENT/LWT","name":"gatewayRF","uniq_id":"246F287AF0C4-gatewayRF","val_tpl":"{{ value_json.value | is_defined }}","pl_avail":"online","pl_not_avail":"offline","device":{"ids":["246F287AF0C4"],"name":"OMG_DEVELOPMENT","mdl":"[\\"WebUI\\",\\"RF\\"]","mf":"OMG_community","cu":"http://192.168.2.150/","sw":"1.8.0-o"}}\nT: Dequeue JSON\n')])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("Then, each time an RF signal is received by OpenMQTTGateway, the content of messages are sent to the MQTT broker on classic topic:")]),t._v(" "),s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('T: Dequeue JSON\nN: [ OMG->MQTT ] topic: home/OMG_DEVELOPMENT/433toMQTT/15524904 msg: {"value":15524904,"protocol":1,"length":24,"delay":368,"tre_state":"-","binary":"111011001110010000101000","raw":"11404,1045,414,1034,424,1024,430,305,1146,1022,431,1019,436,299,1150,304,1145,1021,432,1017,438,1013,441,295,1156,299,1149,1018,436,300,1149,304,1146,307,1143,310,1141,1025,430,306,1143,1021,432,305,1145,310,1140,309"} \n\n')])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("These messages enable Home Assistant to recognize and integrate the RF signal as a sensor.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(320),alt:"MQTTExplorer Show Topic"}}),t._v(" "),s("em",[t._v("Example of a detected RF sensor in Home Assistant: Yellow the configuration of sensor, Green the real message")])]),t._v(" "),s("p",[t._v("Once this process is completed, Home Assistant detects a device with the new sensor and linked to the received RF signal value.\nThis means that Home Assistant can now react to the received RF signal as an sensor event.")]),t._v(" "),s("p",[t._v("Example of a detected RF trigger in Home Assistant:")]),t._v(" "),s("p",[s("img",{attrs:{src:a(321),alt:"MQTTExplorer Show Topic"}}),t._v(" "),s("em",[t._v("Example of a detected RF sensor in Home Assistant: Yellow the real message")])]),t._v(" "),s("h2",{attrs:{id:"manual-integration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#manual-integration"}},[t._v("#")]),t._v(" Manual integration")]),t._v(" "),s("p",[t._v("If you prefer not to use MQTT auto-discovery, you can manually configure Home Assistant to manage MQTT topics. This approach gives you full control over the structure and behavior of your MQTT entities. Below are some examples of how to define your devices, sensors, and switches manually using YAML configuration.")]),t._v(" "),s("p",[t._v("From @123, @finity, @denniz03, @jrockstad, @anarchking, @dkluivingh, @Odyno")]),t._v(" "),s("h3",{attrs:{id:"pir-sensor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#pir-sensor"}},[t._v("#")]),t._v(" Pir Sensor")]),t._v(" "),s("p",[t._v("This is an example of how to configure a PIR (Passive Infrared) sensor in Home Assistant using MQTT.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(322),alt:"Pir Sensor"}})]),t._v(" "),s("p",[t._v("The configuration below sets up a binary sensor that detects motion and sends the state to Home Assistant.")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("binary_sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unique_id")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" pir.15484294\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Pir.Mansarda"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("device_class")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" motion\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/+/433toMQTT/15484294"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{{ value_json.value }}"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_on")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"15484294"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("off_delay")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br")])]),s("h3",{attrs:{id:"door-sensor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#door-sensor"}},[t._v("#")]),t._v(" Door sensor")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("binary_sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/433toMQTT"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% if value_json.value == '7821834' %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ON'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% elif value_json.value == '7821838' %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'OFF'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% else %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("states('binary_sensor.test') "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v(" upper"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% endif %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("qos")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("device_class")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" opening\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br")])]),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("binary_sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" doorbell\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/SRFBtoMQTT'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('#value_template: "{{ value_json.raw }}"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% if value_json.value == '14163857' %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ON'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% else %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("states('binary_sensor.doorbell') "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v(" upper"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% endif %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("off_delay")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("device_class")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sound'")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" light_back_sensor\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/SRFBtoMQTT'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#value_template: '{{ value_jason.value }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% if value_json.value == '1213858' %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ON'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% else %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("states('binary_sensor.light_back_sensor') "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v(" upper"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% endif %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("off_delay")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" rf_outlet_sensor\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/SRFBtoMQTT'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% if value_json.value == '16766303' %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ON'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% else %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("states('binary_sensor.rf_outlet_sensor') "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v(" upper"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% endif %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br"),s("span",{staticClass:"line-number"},[t._v("22")]),s("br"),s("span",{staticClass:"line-number"},[t._v("23")]),s("br"),s("span",{staticClass:"line-number"},[t._v("24")]),s("br"),s("span",{staticClass:"line-number"},[t._v("25")]),s("br"),s("span",{staticClass:"line-number"},[t._v("26")]),s("br"),s("span",{staticClass:"line-number"},[t._v("27")]),s("br"),s("span",{staticClass:"line-number"},[t._v("28")]),s("br"),s("span",{staticClass:"line-number"},[t._v("29")]),s("br"),s("span",{staticClass:"line-number"},[t._v("30")]),s("br"),s("span",{staticClass:"line-number"},[t._v("31")]),s("br"),s("span",{staticClass:"line-number"},[t._v("32")]),s("br"),s("span",{staticClass:"line-number"},[t._v("33")]),s("br")])]),s("h3",{attrs:{id:"motion-sensor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#motion-sensor"}},[t._v("#")]),t._v(" Motion sensor")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("binary_sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bewegung_Schlafzimmer"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#device_class: motion")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway1/HCSR501toMQTT"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json[\"presence\"] }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_on")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"true"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_off")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"false"')]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br")])]),s("h3",{attrs:{id:"switches"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#switches"}},[t._v("#")]),t._v(" Switches")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#switches")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("switch")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Plug1\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/SRFBtoMQTT"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/commands/MQTTtoSRFB"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{{ value_json.value }}"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_on")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{\"value\":4546575}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_off")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{\"value\":4546572}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_on")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4546575")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_off")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4546572")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("qos")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("retain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br")])]),s("h3",{attrs:{id:"rf-gateway-mode-pilight-rf-kaku"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#rf-gateway-mode-pilight-rf-kaku"}},[t._v("#")]),t._v(" RF gateway mode - Pilight, RF, kaku")]),t._v(" "),s("p",[t._v("insert an include statement in HA configuration.yaml")]),t._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("grep")]),t._v(" homed ./configuration.yaml \nmqtt: "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("include homed-mqtt.yaml\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("p",[t._v("In the example, the included file is homed-mqtt.yaml. It provides an mqtt select entity with the ability to show and also change via dropdown - the desired mode of the RF receiver gateway. In the homed-mqtt.yaml snippet, the device section (as it is optional) is ommited,")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("select")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'RF: Mode receive'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unique_id")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" espdevcho"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("rf"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("mode\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#platform: mqtt")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("availability_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" home/espdevcho/LWT "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# espdevcho is a particular name of the gateway, instead of the default OpenMQTTGateway")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_available")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" online\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_not_available")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" offline\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("options")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Pilight"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"RF classic"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"RF2 kaku"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" home/espdevcho/RFtoMQTT "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# espdevcho is a particular name of the gateway, instead of the default OpenMQTTGateway")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token scalar string"}},[t._v("\n {% if value_json.active == 1 %} Pilight\n {% elif value_json.active == 2 %} RF classic\n {% elif value_json.active == 4 %} RF2 kaku\n {% endif %}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#unit_of_measurement: s")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" home/espdevcho/commands/MQTTtoRF/config "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# espdevcho is a particular name of the gateway, instead of the default OpenMQTTGateway")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token scalar string"}},[t._v('\n {% set value_map = {\n "Pilight": 1,\n "RF classic": 2,\n "RF2 kaku": 4,\n }\n %}\n {"active":{{ value_map[value] }}}')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("device")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("configuration_url")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" http"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("//192.168.1.11/ "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# device section is optional. It is almost ommited in this example. Values here will update the corresponding device, if it already exist")]),t._v("\n\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br"),s("span",{staticClass:"line-number"},[t._v("22")]),s("br"),s("span",{staticClass:"line-number"},[t._v("23")]),s("br"),s("span",{staticClass:"line-number"},[t._v("24")]),s("br"),s("span",{staticClass:"line-number"},[t._v("25")]),s("br"),s("span",{staticClass:"line-number"},[t._v("26")]),s("br"),s("span",{staticClass:"line-number"},[t._v("27")]),s("br"),s("span",{staticClass:"line-number"},[t._v("28")]),s("br"),s("span",{staticClass:"line-number"},[t._v("29")]),s("br"),s("span",{staticClass:"line-number"},[t._v("30")]),s("br")])]),s("h3",{attrs:{id:"mijia-thermometer-ble"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mijia-thermometer-ble"}},[t._v("#")]),t._v(" Mijia Thermometer BLE")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mijia_thermometer_temperature"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/BTtoMQTT/AAAAAAAAAAAA'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# MQTT topic, check MQTT messages; replace AA... with id (BLE MAC) of your device")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'°C'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json.tem | is_defined }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("expire_after")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21600")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 6 hours")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("force_update")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mijia_thermometer_humidity"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/BTtoMQTT/AAAAAAAAAAAA'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'%'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json.hum | is_defined }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("expire_after")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21600")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 6 hours")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("force_update")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mijia_thermometer_battery"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/BTtoMQTT/AAAAAAAAAAAA'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'%'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json.batt | is_defined }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("expire_after")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21600")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 6 hours")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("force_update")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br")])]),s("h3",{attrs:{id:"xiaomi-mi-scale-v2-ble-xmtzc05hm"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#xiaomi-mi-scale-v2-ble-xmtzc05hm"}},[t._v("#")]),t._v(" Xiaomi Mi Scale V2 BLE (XMTZC05HM)")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Weight"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/BTtoMQTT/AAAAAAAAAAAA"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# replace your MQTT topic here")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json[\"weight\"] }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"kg"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("icon")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" mdi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("weight"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("kilogram\n \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Impedance"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/BTtoMQTT/AAAAAAAAAAAA"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# replace your MQTT topic here also")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json[\"impedance\"] }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ohm"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("icon")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" mdi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("omega\n \n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("body_mass_index")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("friendly_name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Body Mass Index'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% set HEIGHT = (1.76)"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v("float %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# replace your height in meters")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% set WEIGHT = states('sensor.xmtzc05hm_weight')"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v("float %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" (WEIGHT/(HEIGHT"),s("span",{pre:!0,attrs:{class:"token important"}},[t._v("*HEIGHT))|float|round(1)")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("icon_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token scalar string"}},[t._v("\n {{ 'mdi:human' }}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br"),s("span",{staticClass:"line-number"},[t._v("22")]),s("br"),s("span",{staticClass:"line-number"},[t._v("23")]),s("br"),s("span",{staticClass:"line-number"},[t._v("24")]),s("br")])]),s("h3",{attrs:{id:"mqtt-room-presence"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mqtt-room-presence"}},[t._v("#")]),t._v(" MQTT Room Presence")]),t._v(" "),s("p",[t._v("For the publication into the presence topic the following needs to be activated - "),s("RouterLink",{attrs:{to:"/use/ble.html#setting-if-the-gateway-publish-into-home-assistant-home-presence-topic-default-false-available-with-ha-discovery"}},[t._v("here is the command")])],1),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("platform")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" mqtt_room\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("device_id")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" XX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("XX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("XX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("XX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("XX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("XX "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#Mac Address of device wanting to track")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" you_are_in "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# home assistant will show a sensor named (you are in) with its value being the name you gave the gateway")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/presence"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#timeout:")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#away_timeout:")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br")])]),s("h3",{attrs:{id:"temperature-sensor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#temperature-sensor"}},[t._v("#")]),t._v(" Temperature sensor")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" outdoor temp\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/433toMQTT"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'°C'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token scalar string"}},[t._v("\n {% if value_json is defined and value_json.sensor == 125 %}\n {{ value_json.tempc }}\n {% else %}\n {{ states('sensor.outdoor_temp') }}\n {% endif %}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br")])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{276:function(t,s,a){t.exports=a.p+"assets/img/OpenMQTTGateway-Configuration-Home-Assistant.531a7826.png"},277:function(t,s,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Home_Assistant_MQTT_discovery.8980f020.png"},299:function(t,s,a){t.exports=a.p+"assets/img/OpenMQTTGateway-Configuration-Home-Assistant-Discovery-Integration.15338e07.png"},300:function(t,s,a){t.exports=a.p+"assets/img/OpenMQTTGateway_auto_discovery_Gateway_Home_Assistant.79982abd.gif"},301:function(t,s,a){t.exports=a.p+"assets/img/OpenMQTTGateway_auto_discovery_BLE_Sensor_Home_Assistant.ad3bc9c2.gif"},302:function(t,s,a){t.exports=a.p+"assets/img/HASS-RF-DeviceTrigger.8d14f498.png"},303:function(t,s,a){t.exports=a.p+"assets/img/HASS-RF-Trigger-example.6dd53087.png"},304:function(t,s,a){t.exports=a.p+"assets/img/HASS-RF-MQTTSensor.62ca0325.png"},305:function(t,s,a){t.exports=a.p+"assets/img/HASS-RF-Sensor-example.2909340e.png"},306:function(t,s){t.exports="data:image/png;base64,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"},426:function(t,s,a){"use strict";a.r(s);var e=a(14),n=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"integrate-home-assistant"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#integrate-home-assistant"}},[t._v("#")]),t._v(" Integrate Home Assistant")]),t._v(" "),s("p",[t._v("Home Assistant provide the "),s("a",{attrs:{href:"https://www.home-assistant.io/integrations/mqtt/",target:"_blank",rel:"noopener noreferrer"}},[t._v("MQTT integration"),s("OutboundLink")],1),t._v(" and through this integration it is possible to exploit and manage the messages published by OpenMQTTGateway.")]),t._v(" "),s("p",[t._v("Once this integration on home assistant is configured with the same MQTT broker, it is possible to create devices manually or through the autodiscovery function.")]),t._v(" "),s("h2",{attrs:{id:"automatic-integration-with-auto-discovery"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#automatic-integration-with-auto-discovery"}},[t._v("#")]),t._v(" Automatic integration with Auto discovery")]),t._v(" "),s("p",[t._v("From Home Assistant site")]),t._v(" "),s("blockquote",[s("p",[t._v("The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. The configuration is done on the device itself and the topic used by the device.")])]),t._v(" "),s("p",[t._v("On OpenMQTTGateway the Home Assistant discovery is enabled by default on all binaries and platformio configurations. Here are a few tips for activating discovery on Home Assistant, but for detailed configuration please refer to the Home Assistant website.")]),t._v(" "),s("p",[t._v("Enable discovery on your MQTT integration in HASS (activated per default).")]),t._v(" "),s("p",[s("img",{attrs:{src:a(299),alt:"Home Assistant Auto Discovery"}})]),t._v(" "),s("p",[t._v("The gateway will need an MQTT username and password, you have to create a new user (recommended) into Home Assistant->Configuration->Users (available in admin mode) or use an existing username/pwd combination (not recommended). This user doesn't need to be an administrator.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(276),alt:"Home Assistant Auto Discovery"}})]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),s("p",[t._v("The max size of the username and password is 64 characters.")])]),t._v(" "),s("p",[t._v("OMG will use the auto discovery functionality of home assistant to create gateway and sensors into your HASS instance automatically.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(300),alt:"Home Assistant Auto Discovery"}})]),t._v(" "),s("p",[s("img",{attrs:{src:a(301),alt:"Home Assistant Auto Discovery"}})]),t._v(" "),s("p",[s("img",{attrs:{src:a(277),alt:"Home Assistant Auto Discovery"}})]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("INFO")]),t._v(" "),s("p",[t._v("The Bluetooth and the RTL_433 gateway will automatically create devices and entities, the RF gateway will create DeviceTrigger.\nThe OpenMQTTGateway will also be available as a device to monitor its parameters and control it. The sensors (DHT for example) and actuators (relays) are attached to the gateway.")]),t._v(" "),s("p",[t._v("On first and subsequent startups, auto discovery will start. If you want to prevent this from happening, be sure to manually turn off auto discovery, either by using the UI in Home Assistant, or by publishing to the home/"),s("gatewayname",[t._v("/commands/MQTTtoSYS/config topic.\n30 minutes after its activation the auto discovery will be automatically deactivated, you can reactivate it from the gateway controls.\nSome devices may require a button push or motion/contact event to trigger a message and generate the auto discovery.")])],1)]),t._v(" "),s("h3",{attrs:{id:"rtl-433-auto-discovery-specificity"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#rtl-433-auto-discovery-specificity"}},[t._v("#")]),t._v(" RTL_433 auto discovery specificity")]),t._v(" "),s("p",[t._v("Even if the RTL_433 gateway will create automatically the devices and entities, you may lose the link to them when you change the batteries. This is proper to the RF devices. In this case new device and entities will be created. You may bypass this by creating entities through manual configuration that filter following the device model and other parameters and don't take into account the id.\nExample:")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"+/+/RTL_433toMQTT/WS2032/+"')]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("instead of")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"+/+/RTL_433toMQTT/WS2032/47998"')]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("Note also that the sensor may leverage channels, types or subtypes, they can be used in the filtering\nExample:\nIn the example below 9 is the "),s("code",[t._v("subtype")]),t._v(" and 1 is the "),s("code",[t._v("channel")])]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"+/+/RTL_433toMQTT/Prologue-TH/9/1/+"')]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("instead of")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"+/+/RTL_433toMQTT/Prologue-TH/9/1/215"')]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("Alternatively the rssi signal could be used also.")]),t._v(" "),s("h3",{attrs:{id:"rf-rcswitch-based-gateway-auto-discovery-specificity"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#rf-rcswitch-based-gateway-auto-discovery-specificity"}},[t._v("#")]),t._v(" RF (RCSwitch based gateway) Auto discovery specificity")]),t._v(" "),s("p",[t._v("With OpenMQTTGateway "),s("RouterLink",{attrs:{to:"/setitup/rf.html"}},[t._v("configured to receive RF signals")]),t._v(" messages are transmitted accordingly.")],1),t._v(" "),s("p",[t._v("As indicated in the "),s("RouterLink",{attrs:{to:"/use/rf.html#rcswitch-based-gateway"}},[t._v("RCSwitch based gateway")]),t._v(", it is possible to receive a pulse each time the sensor detects a signal. With auto-discovery enabled, you can configure two types of entities in Home Assistant to handle RF signals:")],1),t._v(" "),s("ol",[s("li",[t._v("An "),s("a",{attrs:{href:"https://www.home-assistant.io/integrations/device_trigger.mqtt/",target:"_blank",rel:"noopener noreferrer"}},[t._v("MQTT Device Trigger"),s("OutboundLink")],1),t._v(" which allows actions to be triggered when a specific RF signal is received.")]),t._v(" "),s("li",[t._v("An "),s("a",{attrs:{href:"https://www.home-assistant.io/integrations/sensor.mqtt/",target:"_blank",rel:"noopener noreferrer"}},[t._v("MQTT Sensor"),s("OutboundLink")],1),t._v("\nwhich stores the received RF data as a sensor value.")])]),t._v(" "),s("p",[t._v("Below are some examples of both configurations.")]),t._v(" "),s("h4",{attrs:{id:"example-a-rf-as-mqtt-device-trigger"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-a-rf-as-mqtt-device-trigger"}},[t._v("#")]),t._v(" Example A - RF as MQTT Device Trigger")]),t._v(" "),s("p",[t._v("If the following parameters are enabled in OpenMQTTGateway:")]),t._v(" "),s("ul",[s("li",[t._v('ZgatewayRF="RF"')]),t._v(" "),s("li",[t._v("valueAsATopic=true")]),t._v(" "),s("li",[t._v("HADiscovery=true")]),t._v(" "),s("li",[t._v("RF_on_HAS_as_DeviceTrigger=true")]),t._v(" "),s("li",[t._v("RF_on_HAS_as_MQTTSensor=false")])]),t._v(" "),s("p",[t._v("Then, each time an RF signal is received by OpenMQTTGateway, two messages are sent to the MQTT broker:")]),t._v(" "),s("ol",[s("li",[t._v("A device trigger announcement (used by Home Assistant to recognize the trigger).")]),t._v(" "),s("li",[t._v("The RF signal data on the corresponding MQTT topic.")])]),t._v(" "),s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('...\nN: [ OMG->MQTT ] topic: homeassistant/device_automation/246F287AF0C4/15524904/config msg: {"automation_type":"trigger","platform ":"device_automation","type":"Received","subtype":"RF-15524904","device":{"configuration_url":"http://192.168.2.150/","connections":[["mac","246F287AF0C4"]],"identifiers":["246F287AF0C4"],"mf":"OMG_community","mdl":"[\\"WebUI\\",\\"RF\\"]","name":"OMG_DEVELOPMENT","sw":"1.8.0-o"},"value_template":"{{trigger.value.raw}}","topic":"home/OMG_DEVELOPMENT/433toMQTT/15524904"}\nT: Dequeue JSON\nN: [ OMG->MQTT ] topic: home/OMG_DEVELOPMENT/433toMQTT/15524904 msg: {"value":15524904,"protocol":1,"length":24,"delay":368,"tre_state":"-","binary":"111011001110010000101000","raw":"11427,1042,407,1039,417,1027,430,302,1148,1019,438,1015,440,295,1152,301,1153,1014,442,1012,441,1008,445,291,1160,293,1158,1011,444,292,1156,296,1157,296,1157,298,1154,1011,442,295,1153,1013,443,293,1157,295,1154,300"}\n...\n')])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br")])]),s("p",[t._v("These messages allow Home Assistant to recognize and integrate the RF signal as a device trigger.\n"),s("img",{attrs:{src:a(302),alt:"MQTTExplorer Show Topic"}}),t._v(" "),s("em",[t._v("Example of a detected RF device trigger in Home Assistant: Green shows the real message, Yellow shows the device trigger configuration")])]),t._v(" "),s("p",[t._v("Once this process is completed, Home Assistant detects a new trigger associated with the OpenMQTTGateway device and linked to the received RF signal value.\nThis means that Home Assistant can now react to the received RF signal as an automation trigger.")]),t._v(" "),s("p",[t._v("Example of a detected RF trigger in Home Assistant:")]),t._v(" "),s("p",[s("img",{attrs:{src:a(303),alt:"MQTTExplorer Show Topic"}}),t._v(" "),s("em",[t._v("Example of a detected RF trigger in Home Assistant")])]),t._v(" "),s("h4",{attrs:{id:"example-b-rf-as-mqtt-sensor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-b-rf-as-mqtt-sensor"}},[t._v("#")]),t._v(" Example B - RF As MQTT Sensor")]),t._v(" "),s("p",[t._v("If the following parameters are enabled in OpenMQTTGateway:")]),t._v(" "),s("ul",[s("li",[t._v('ZgatewayRF="RF"')]),t._v(" "),s("li",[t._v("HADiscovery=true")]),t._v(" "),s("li",[t._v("RF_on_HAS_as_DeviceTrigger=false")]),t._v(" "),s("li",[t._v("RF_on_HAS_as_MQTTSensor=true")])]),t._v(" "),s("p",[t._v("During any discovery round, a SYS message is sent, setting the MQTT Sensor as a sensor of the OpenMQTTGateway device.")]),t._v(" "),s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('...\nN: [ OMG->MQTT ] topic: homeassistant/sensor/246F287AF0C4-gatewayRF/config msg: {"stat_t":"home/OMG_DEVELOPMENT/433toMQTT/#","avty_t":"home/OMG_DEVELOPMENT/LWT","name":"gatewayRF","uniq_id":"246F287AF0C4-gatewayRF","val_tpl":"{{ value_json.value | is_defined }}","pl_avail":"online","pl_not_avail":"offline","device":{"ids":["246F287AF0C4"],"name":"OMG_DEVELOPMENT","mdl":"[\\"WebUI\\",\\"RF\\"]","mf":"OMG_community","cu":"http://192.168.2.150/","sw":"1.8.0-o"}}\nT: Dequeue JSON\n')])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("Then, each time an RF signal is received by OpenMQTTGateway, the content of messages are sent to the MQTT broker on classic topic:")]),t._v(" "),s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('T: Dequeue JSON\nN: [ OMG->MQTT ] topic: home/OMG_DEVELOPMENT/433toMQTT/15524904 msg: {"value":15524904,"protocol":1,"length":24,"delay":368,"tre_state":"-","binary":"111011001110010000101000","raw":"11404,1045,414,1034,424,1024,430,305,1146,1022,431,1019,436,299,1150,304,1145,1021,432,1017,438,1013,441,295,1156,299,1149,1018,436,300,1149,304,1146,307,1143,310,1141,1025,430,306,1143,1021,432,305,1145,310,1140,309"} \n\n')])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("These messages enable Home Assistant to recognize and integrate the RF signal as a sensor.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(304),alt:"MQTTExplorer Show Topic"}}),t._v(" "),s("em",[t._v("Example of a detected RF sensor in Home Assistant: Yellow the configuration of sensor, Green the real message")])]),t._v(" "),s("p",[t._v("Once this process is completed, Home Assistant detects a device with the new sensor and linked to the received RF signal value.\nThis means that Home Assistant can now react to the received RF signal as an sensor event.")]),t._v(" "),s("p",[t._v("Example of a detected RF trigger in Home Assistant:")]),t._v(" "),s("p",[s("img",{attrs:{src:a(305),alt:"MQTTExplorer Show Topic"}}),t._v(" "),s("em",[t._v("Example of a detected RF sensor in Home Assistant: Yellow the real message")])]),t._v(" "),s("h2",{attrs:{id:"manual-integration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#manual-integration"}},[t._v("#")]),t._v(" Manual integration")]),t._v(" "),s("p",[t._v("If you prefer not to use MQTT auto-discovery, you can manually configure Home Assistant to manage MQTT topics. This approach gives you full control over the structure and behavior of your MQTT entities. Below are some examples of how to define your devices, sensors, and switches manually using YAML configuration.")]),t._v(" "),s("p",[t._v("From @123, @finity, @denniz03, @jrockstad, @anarchking, @dkluivingh, @Odyno")]),t._v(" "),s("h3",{attrs:{id:"pir-sensor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#pir-sensor"}},[t._v("#")]),t._v(" Pir Sensor")]),t._v(" "),s("p",[t._v("This is an example of how to configure a PIR (Passive Infrared) sensor in Home Assistant using MQTT.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(306),alt:"Pir Sensor"}})]),t._v(" "),s("p",[t._v("The configuration below sets up a binary sensor that detects motion and sends the state to Home Assistant.")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("binary_sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unique_id")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" pir.15484294\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Pir.Mansarda"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("device_class")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" motion\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/+/433toMQTT/15484294"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{{ value_json.value }}"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_on")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"15484294"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("off_delay")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br")])]),s("h3",{attrs:{id:"door-sensor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#door-sensor"}},[t._v("#")]),t._v(" Door sensor")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("binary_sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/433toMQTT"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% if value_json.value == '7821834' %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ON'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% elif value_json.value == '7821838' %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'OFF'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% else %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("states('binary_sensor.test') "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v(" upper"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% endif %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("qos")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("device_class")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" opening\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br")])]),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("binary_sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" doorbell\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/SRFBtoMQTT'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('#value_template: "{{ value_json.raw }}"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% if value_json.value == '14163857' %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ON'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% else %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("states('binary_sensor.doorbell') "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v(" upper"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% endif %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("off_delay")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("device_class")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sound'")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" light_back_sensor\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/SRFBtoMQTT'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#value_template: '{{ value_jason.value }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% if value_json.value == '1213858' %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ON'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% else %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("states('binary_sensor.light_back_sensor') "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v(" upper"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% endif %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("off_delay")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" rf_outlet_sensor\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/SRFBtoMQTT'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% if value_json.value == '16766303' %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ON'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% else %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("states('binary_sensor.rf_outlet_sensor') "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v(" upper"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% endif %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br"),s("span",{staticClass:"line-number"},[t._v("22")]),s("br"),s("span",{staticClass:"line-number"},[t._v("23")]),s("br"),s("span",{staticClass:"line-number"},[t._v("24")]),s("br"),s("span",{staticClass:"line-number"},[t._v("25")]),s("br"),s("span",{staticClass:"line-number"},[t._v("26")]),s("br"),s("span",{staticClass:"line-number"},[t._v("27")]),s("br"),s("span",{staticClass:"line-number"},[t._v("28")]),s("br"),s("span",{staticClass:"line-number"},[t._v("29")]),s("br"),s("span",{staticClass:"line-number"},[t._v("30")]),s("br"),s("span",{staticClass:"line-number"},[t._v("31")]),s("br"),s("span",{staticClass:"line-number"},[t._v("32")]),s("br"),s("span",{staticClass:"line-number"},[t._v("33")]),s("br")])]),s("h3",{attrs:{id:"motion-sensor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#motion-sensor"}},[t._v("#")]),t._v(" Motion sensor")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("binary_sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bewegung_Schlafzimmer"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#device_class: motion")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway1/HCSR501toMQTT"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json[\"presence\"] }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_on")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"true"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_off")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"false"')]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br")])]),s("h3",{attrs:{id:"switches"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#switches"}},[t._v("#")]),t._v(" Switches")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#switches")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("switch")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Plug1\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/SRFBtoMQTT"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/commands/MQTTtoSRFB"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{{ value_json.value }}"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_on")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{\"value\":4546575}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_off")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{\"value\":4546572}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_on")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4546575")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_off")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4546572")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("qos")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("retain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br")])]),s("h3",{attrs:{id:"rf-gateway-mode-pilight-rf-kaku"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#rf-gateway-mode-pilight-rf-kaku"}},[t._v("#")]),t._v(" RF gateway mode - Pilight, RF, kaku")]),t._v(" "),s("p",[t._v("insert an include statement in HA configuration.yaml")]),t._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("grep")]),t._v(" homed ./configuration.yaml \nmqtt: "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("include homed-mqtt.yaml\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("p",[t._v("In the example, the included file is homed-mqtt.yaml. It provides an mqtt select entity with the ability to show and also change via dropdown - the desired mode of the RF receiver gateway. In the homed-mqtt.yaml snippet, the device section (as it is optional) is ommited,")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("select")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'RF: Mode receive'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unique_id")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" espdevcho"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("rf"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("mode\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#platform: mqtt")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("availability_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" home/espdevcho/LWT "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# espdevcho is a particular name of the gateway, instead of the default OpenMQTTGateway")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_available")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" online\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("payload_not_available")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" offline\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("options")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Pilight"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"RF classic"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"RF2 kaku"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" home/espdevcho/RFtoMQTT "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# espdevcho is a particular name of the gateway, instead of the default OpenMQTTGateway")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token scalar string"}},[t._v("\n {% if value_json.active == 1 %} Pilight\n {% elif value_json.active == 2 %} RF classic\n {% elif value_json.active == 4 %} RF2 kaku\n {% endif %}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#unit_of_measurement: s")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" home/espdevcho/commands/MQTTtoRF/config "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# espdevcho is a particular name of the gateway, instead of the default OpenMQTTGateway")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token scalar string"}},[t._v('\n {% set value_map = {\n "Pilight": 1,\n "RF classic": 2,\n "RF2 kaku": 4,\n }\n %}\n {"active":{{ value_map[value] }}}')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("device")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("configuration_url")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" http"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("//192.168.1.11/ "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# device section is optional. It is almost ommited in this example. Values here will update the corresponding device, if it already exist")]),t._v("\n\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br"),s("span",{staticClass:"line-number"},[t._v("22")]),s("br"),s("span",{staticClass:"line-number"},[t._v("23")]),s("br"),s("span",{staticClass:"line-number"},[t._v("24")]),s("br"),s("span",{staticClass:"line-number"},[t._v("25")]),s("br"),s("span",{staticClass:"line-number"},[t._v("26")]),s("br"),s("span",{staticClass:"line-number"},[t._v("27")]),s("br"),s("span",{staticClass:"line-number"},[t._v("28")]),s("br"),s("span",{staticClass:"line-number"},[t._v("29")]),s("br"),s("span",{staticClass:"line-number"},[t._v("30")]),s("br")])]),s("h3",{attrs:{id:"mijia-thermometer-ble"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mijia-thermometer-ble"}},[t._v("#")]),t._v(" Mijia Thermometer BLE")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mijia_thermometer_temperature"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/BTtoMQTT/AAAAAAAAAAAA'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# MQTT topic, check MQTT messages; replace AA... with id (BLE MAC) of your device")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'°C'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json.tem | is_defined }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("expire_after")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21600")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 6 hours")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("force_update")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mijia_thermometer_humidity"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/BTtoMQTT/AAAAAAAAAAAA'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'%'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json.hum | is_defined }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("expire_after")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21600")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 6 hours")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("force_update")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mijia_thermometer_battery"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'home/OpenMQTTGateway/BTtoMQTT/AAAAAAAAAAAA'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'%'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json.batt | is_defined }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("expire_after")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21600")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 6 hours")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("force_update")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br")])]),s("h3",{attrs:{id:"xiaomi-mi-scale-v2-ble-xmtzc05hm"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#xiaomi-mi-scale-v2-ble-xmtzc05hm"}},[t._v("#")]),t._v(" Xiaomi Mi Scale V2 BLE (XMTZC05HM)")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Weight"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/BTtoMQTT/AAAAAAAAAAAA"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# replace your MQTT topic here")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json[\"weight\"] }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"kg"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("icon")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" mdi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("weight"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("kilogram\n \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Impedance"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/BTtoMQTT/AAAAAAAAAAAA"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# replace your MQTT topic here also")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ value_json[\"impedance\"] }}'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ohm"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("icon")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" mdi"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("omega\n \n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("body_mass_index")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("friendly_name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Body Mass Index'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% set HEIGHT = (1.76)"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v("float %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# replace your height in meters")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("% set WEIGHT = states('sensor.xmtzc05hm_weight')"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v("float %"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" (WEIGHT/(HEIGHT"),s("span",{pre:!0,attrs:{class:"token important"}},[t._v("*HEIGHT))|float|round(1)")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("icon_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token scalar string"}},[t._v("\n {{ 'mdi:human' }}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br"),s("span",{staticClass:"line-number"},[t._v("22")]),s("br"),s("span",{staticClass:"line-number"},[t._v("23")]),s("br"),s("span",{staticClass:"line-number"},[t._v("24")]),s("br")])]),s("h3",{attrs:{id:"mqtt-room-presence"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mqtt-room-presence"}},[t._v("#")]),t._v(" MQTT Room Presence")]),t._v(" "),s("p",[t._v("For the publication into the presence topic the following needs to be activated - "),s("RouterLink",{attrs:{to:"/use/ble.html#setting-if-the-gateway-publish-into-home-assistant-home-presence-topic-default-false-available-with-ha-discovery"}},[t._v("here is the command")])],1),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("platform")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" mqtt_room\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("device_id")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" XX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("XX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("XX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("XX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("XX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("XX "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#Mac Address of device wanting to track")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" you_are_in "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# home assistant will show a sensor named (you are in) with its value being the name you gave the gateway")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/presence"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#timeout:")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#away_timeout:")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br")])]),s("h3",{attrs:{id:"temperature-sensor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#temperature-sensor"}},[t._v("#")]),t._v(" Temperature sensor")]),t._v(" "),s("div",{staticClass:"language-yaml line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-yaml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("mqtt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("sensor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" outdoor temp\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("state_topic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/OpenMQTTGateway/433toMQTT"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("unit_of_measurement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'°C'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("value_template")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token scalar string"}},[t._v("\n {% if value_json is defined and value_json.sensor == 125 %}\n {{ value_json.tempc }}\n {% else %}\n {{ states('sensor.outdoor_temp') }}\n {% endif %}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br")])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/17.923ad7c4.js b/dev/assets/js/17.f1de91d0.js similarity index 98% rename from dev/assets/js/17.923ad7c4.js rename to dev/assets/js/17.f1de91d0.js index 1d483dbe..f6cb5ff5 100644 --- a/dev/assets/js/17.923ad7c4.js +++ b/dev/assets/js/17.f1de91d0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{348:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration.b7bcc85b.png"},349:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-debug.223a3034.png"},350:function(s,t){s.exports="data:image/png;base64,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"},351:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-debug3.be5f1c56.png"},352:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-process.f067ee5a.png"},353:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-gauge.d54f29fc.png"},354:function(s,t){s.exports="data:image/png;base64,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"},355:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-chart.b3fd693b.png"},356:function(s,t){s.exports="data:image/png;base64,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"},357:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-flow-BLE-temperature.188db207.png"},429:function(s,t,a){"use strict";a.r(t);var n=a(14),r=Object(n.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"integrate-node-red"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#integrate-node-red"}},[s._v("#")]),s._v(" Integrate Node-Red")]),s._v(" "),t("h2",{attrs:{id:"integrate-ble-sensors-devices-and-display-a-dashboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#integrate-ble-sensors-devices-and-display-a-dashboard"}},[s._v("#")]),s._v(" Integrate BLE sensors, devices and display a dashboard")]),s._v(" "),t("p",[s._v("Prerequisites: node-red, node-red-dashboard")]),s._v(" "),t("h3",{attrs:{id:"broker-connection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#broker-connection"}},[s._v("#")]),s._v(" Broker connection")]),s._v(" "),t("ul",[t("li",[s._v("Add a new "),t("code",[s._v("mqtt in")]),s._v(" node")]),s._v(" "),t("li",[s._v("Click 2 times on it")]),s._v(" "),t("li",[s._v("Add a new broker or connect to an existing one (server field)")]),s._v(" "),t("li",[s._v("Set the topic like below with the MAC address at the end being the one of the device you want to integrate")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(348),alt:"NodeRed integration"}})]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),t("p",[s._v('The "+" enables to process the data from all the gateways whatever name they have. So you may setup several OpenMQTTGateway, you will not have to change the Node-Red configuration.')])]),s._v(" "),t("p",[s._v("This configuration enables to process all the data coming from the sensor.")]),s._v(" "),t("ul",[t("li",[s._v("Click on done")]),s._v(" "),t("li",[s._v("So as to monitor the traffic coming; you can add a debug node with "),t("em",[s._v("msg.payload")]),s._v(" as Output")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(349),alt:"NodeRed integration"}})]),s._v(" "),t("ul",[t("li",[s._v("Link it to the "),t("code",[s._v("mqtt in")]),s._v(" node")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(350),alt:"NodeRed integration"}})]),s._v(" "),t("ul",[t("li",[s._v("Deploy")]),s._v(" "),t("li",[s._v("Open the debug panel")]),s._v(" "),t("li",[s._v("You should see messages coming when the gateway will receive data")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(351),alt:"NodeRed integration"}})]),s._v(" "),t("h3",{attrs:{id:"json-message-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#json-message-processing"}},[s._v("#")]),s._v(" Json message processing")]),s._v(" "),t("p",[s._v("We need to process the json message so as to extract the value that we want to display.")]),s._v(" "),t("ul",[t("li",[s._v("Add a "),t("code",[s._v("change")]),s._v(" node")]),s._v(" "),t("li",[s._v("Configure it as "),t("code",[s._v("Move")])]),s._v(" "),t("li",[s._v("Add the msg value you would like to process example "),t("em",[s._v("msg.payload.tempc")]),s._v(" and the target "),t("em",[s._v("msg.payload")])])]),s._v(" "),t("p",[t("img",{attrs:{src:a(352),alt:"NodeRed integration"}})]),s._v(" "),t("ul",[t("li",[s._v("Connect the "),t("code",[s._v("change")]),s._v(" node to the "),t("code",[s._v("mqtt in")]),s._v(" node")])]),s._v(" "),t("h3",{attrs:{id:"dashboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dashboard"}},[s._v("#")]),s._v(" Dashboard")]),s._v(" "),t("p",[s._v("You can now add widget so as to display the value processed above")]),s._v(" "),t("ul",[t("li",[s._v("Add a "),t("code",[s._v("gauge")]),s._v(" node")]),s._v(" "),t("li",[s._v("Add a group and organize your dashboard")]),s._v(" "),t("li",[s._v("Add your value format to process the payload like below")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(353),alt:"NodeRed integration"}})]),s._v(" "),t("ul",[t("li",[s._v("Click on Done")]),s._v(" "),t("li",[s._v("Deploy")]),s._v(" "),t("li",[s._v("Go to your "),t("code",[s._v("node-red url")]),s._v("/ui")])]),s._v(" "),t("p",[s._v("You should see the gauge with the last value displayed")]),s._v(" "),t("p",[t("img",{attrs:{src:a(354),alt:"NodeRed integration"}})]),s._v(" "),t("p",[s._v("You can also add easily a chart node:")]),s._v(" "),t("p",[t("img",{attrs:{src:a(355),alt:"NodeRed integration"}})]),s._v(" "),t("p",[t("img",{attrs:{src:a(356),alt:"NodeRed integration"}})]),s._v(" "),t("p",[s._v("Or a function with a notification:")]),s._v(" "),t("p",[t("img",{attrs:{src:a(357),alt:"NodeRed integration"}})]),s._v(" "),t("h2",{attrs:{id:"integrate-rf"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#integrate-rf"}},[s._v("#")]),s._v(" Integrate RF")]),s._v(" "),t("p",[s._v("Here is a simple set of flows for integrating OpenMQTTGateway with NodeRED via an ESP8266 module.")]),s._v(" "),t("p",[s._v("In this example I have used a Wemos D1 Mini with some cheap RF modules.")]),s._v(" "),t("p",[t("img",{attrs:{src:"https://i.imgur.com/z2RFvUw.jpg",alt:"NodeRed integration"}})]),s._v(" "),t("p",[s._v("A flow to receive 433MHz signals into NodeRED (you will need to update the IP address of your broker)")]),s._v(" "),t("p",[t("img",{attrs:{src:"https://i.imgur.com/2UWYzHg.jpg",alt:"NodeRed integration"}})]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6d1b2915.7ce798"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mqtt in"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"433MQTT"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"topic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"home/OpenMQTTGateway/433toMQTT"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"qos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"broker"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4572f098.cc1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("80")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("740")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"fe53b819.4f9568"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"fe53b819.4f9568"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"debug"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"active"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tosidebar"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"console"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tostatus"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"complete"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("290")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("740")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4572f098.cc1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mqtt-broker"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"broker"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"192.168.0.56"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1883"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"clientid"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"usetls"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"compatmode"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"keepalive"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"60"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cleansession"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willTopic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willQos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willRetain"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"false"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willPayload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthTopic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthQos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthRetain"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"false"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthPayload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br"),t("span",{staticClass:"line-number"},[s._v("40")]),t("br"),t("span",{staticClass:"line-number"},[s._v("41")]),t("br"),t("span",{staticClass:"line-number"},[s._v("42")]),t("br"),t("span",{staticClass:"line-number"},[s._v("43")]),t("br"),t("span",{staticClass:"line-number"},[s._v("44")]),t("br"),t("span",{staticClass:"line-number"},[s._v("45")]),t("br"),t("span",{staticClass:"line-number"},[s._v("46")]),t("br"),t("span",{staticClass:"line-number"},[s._v("47")]),t("br"),t("span",{staticClass:"line-number"},[s._v("48")]),t("br"),t("span",{staticClass:"line-number"},[s._v("49")]),t("br"),t("span",{staticClass:"line-number"},[s._v("50")]),t("br"),t("span",{staticClass:"line-number"},[s._v("51")]),t("br"),t("span",{staticClass:"line-number"},[s._v("52")]),t("br"),t("span",{staticClass:"line-number"},[s._v("53")]),t("br")])]),t("p",[s._v("A flow to send 433MHz signals from NodeRED")]),s._v(" "),t("p",[t("img",{attrs:{src:"https://i.imgur.com/PMlWyii.jpg",alt:"NodeRed integration"}})]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ff924d56.459d6"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mqtt out"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MQTTto433"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"topic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"qos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"retain"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"broker"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4572f098.cc1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("610")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("860")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6c25a2d4.6c733c"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"inject"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"topic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"On"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"payloadType"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"repeat"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"crontab"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"once"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"onceDelay"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("90")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("840")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7689fe88.45679"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a76d2f03.5f3"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"change"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"rules"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"t"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"set"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"p"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"pt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"msg"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5510487"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tot"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"action"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"property"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"from"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"reg"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("380")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("840")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ff924d56.459d6"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7689fe88.45679"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"switch"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"property"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"propertyType"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"msg"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"rules"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"t"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"eq"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"v"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"On"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"vt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"t"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"eq"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"v"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Off"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"vt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"checkall"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"true"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"repair"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"outputs"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("210")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("860")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a76d2f03.5f3"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6a7c2c3a.567794"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7e52ec9.00dde14"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"inject"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"topic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Off"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"payloadType"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"repeat"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"crontab"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"once"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"onceDelay"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("90")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("880")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7689fe88.45679"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6a7c2c3a.567794"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"change"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"rules"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"t"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"set"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"p"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"pt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"msg"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4527444"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tot"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"action"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"property"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"from"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"reg"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("380")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("880")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ff924d56.459d6"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"20991aea.cca8a6"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"comment"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Set you RF codes here."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"info"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("380")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("800")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4572f098.cc1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mqtt-broker"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"broker"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"192.168.0.56"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1883"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"clientid"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"usetls"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"compatmode"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"keepalive"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"60"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cleansession"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willTopic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willQos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willRetain"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"false"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willPayload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthTopic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthQos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthRetain"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"false"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthPayload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br"),t("span",{staticClass:"line-number"},[s._v("40")]),t("br"),t("span",{staticClass:"line-number"},[s._v("41")]),t("br"),t("span",{staticClass:"line-number"},[s._v("42")]),t("br"),t("span",{staticClass:"line-number"},[s._v("43")]),t("br"),t("span",{staticClass:"line-number"},[s._v("44")]),t("br"),t("span",{staticClass:"line-number"},[s._v("45")]),t("br"),t("span",{staticClass:"line-number"},[s._v("46")]),t("br"),t("span",{staticClass:"line-number"},[s._v("47")]),t("br"),t("span",{staticClass:"line-number"},[s._v("48")]),t("br"),t("span",{staticClass:"line-number"},[s._v("49")]),t("br"),t("span",{staticClass:"line-number"},[s._v("50")]),t("br"),t("span",{staticClass:"line-number"},[s._v("51")]),t("br"),t("span",{staticClass:"line-number"},[s._v("52")]),t("br"),t("span",{staticClass:"line-number"},[s._v("53")]),t("br"),t("span",{staticClass:"line-number"},[s._v("54")]),t("br"),t("span",{staticClass:"line-number"},[s._v("55")]),t("br"),t("span",{staticClass:"line-number"},[s._v("56")]),t("br"),t("span",{staticClass:"line-number"},[s._v("57")]),t("br"),t("span",{staticClass:"line-number"},[s._v("58")]),t("br"),t("span",{staticClass:"line-number"},[s._v("59")]),t("br"),t("span",{staticClass:"line-number"},[s._v("60")]),t("br"),t("span",{staticClass:"line-number"},[s._v("61")]),t("br"),t("span",{staticClass:"line-number"},[s._v("62")]),t("br"),t("span",{staticClass:"line-number"},[s._v("63")]),t("br"),t("span",{staticClass:"line-number"},[s._v("64")]),t("br"),t("span",{staticClass:"line-number"},[s._v("65")]),t("br"),t("span",{staticClass:"line-number"},[s._v("66")]),t("br"),t("span",{staticClass:"line-number"},[s._v("67")]),t("br"),t("span",{staticClass:"line-number"},[s._v("68")]),t("br"),t("span",{staticClass:"line-number"},[s._v("69")]),t("br"),t("span",{staticClass:"line-number"},[s._v("70")]),t("br"),t("span",{staticClass:"line-number"},[s._v("71")]),t("br"),t("span",{staticClass:"line-number"},[s._v("72")]),t("br"),t("span",{staticClass:"line-number"},[s._v("73")]),t("br"),t("span",{staticClass:"line-number"},[s._v("74")]),t("br"),t("span",{staticClass:"line-number"},[s._v("75")]),t("br"),t("span",{staticClass:"line-number"},[s._v("76")]),t("br"),t("span",{staticClass:"line-number"},[s._v("77")]),t("br"),t("span",{staticClass:"line-number"},[s._v("78")]),t("br"),t("span",{staticClass:"line-number"},[s._v("79")]),t("br"),t("span",{staticClass:"line-number"},[s._v("80")]),t("br"),t("span",{staticClass:"line-number"},[s._v("81")]),t("br"),t("span",{staticClass:"line-number"},[s._v("82")]),t("br"),t("span",{staticClass:"line-number"},[s._v("83")]),t("br"),t("span",{staticClass:"line-number"},[s._v("84")]),t("br"),t("span",{staticClass:"line-number"},[s._v("85")]),t("br"),t("span",{staticClass:"line-number"},[s._v("86")]),t("br"),t("span",{staticClass:"line-number"},[s._v("87")]),t("br"),t("span",{staticClass:"line-number"},[s._v("88")]),t("br"),t("span",{staticClass:"line-number"},[s._v("89")]),t("br"),t("span",{staticClass:"line-number"},[s._v("90")]),t("br"),t("span",{staticClass:"line-number"},[s._v("91")]),t("br"),t("span",{staticClass:"line-number"},[s._v("92")]),t("br"),t("span",{staticClass:"line-number"},[s._v("93")]),t("br"),t("span",{staticClass:"line-number"},[s._v("94")]),t("br"),t("span",{staticClass:"line-number"},[s._v("95")]),t("br"),t("span",{staticClass:"line-number"},[s._v("96")]),t("br"),t("span",{staticClass:"line-number"},[s._v("97")]),t("br"),t("span",{staticClass:"line-number"},[s._v("98")]),t("br"),t("span",{staticClass:"line-number"},[s._v("99")]),t("br"),t("span",{staticClass:"line-number"},[s._v("100")]),t("br"),t("span",{staticClass:"line-number"},[s._v("101")]),t("br"),t("span",{staticClass:"line-number"},[s._v("102")]),t("br"),t("span",{staticClass:"line-number"},[s._v("103")]),t("br"),t("span",{staticClass:"line-number"},[s._v("104")]),t("br"),t("span",{staticClass:"line-number"},[s._v("105")]),t("br"),t("span",{staticClass:"line-number"},[s._v("106")]),t("br"),t("span",{staticClass:"line-number"},[s._v("107")]),t("br"),t("span",{staticClass:"line-number"},[s._v("108")]),t("br"),t("span",{staticClass:"line-number"},[s._v("109")]),t("br"),t("span",{staticClass:"line-number"},[s._v("110")]),t("br"),t("span",{staticClass:"line-number"},[s._v("111")]),t("br"),t("span",{staticClass:"line-number"},[s._v("112")]),t("br"),t("span",{staticClass:"line-number"},[s._v("113")]),t("br"),t("span",{staticClass:"line-number"},[s._v("114")]),t("br"),t("span",{staticClass:"line-number"},[s._v("115")]),t("br"),t("span",{staticClass:"line-number"},[s._v("116")]),t("br"),t("span",{staticClass:"line-number"},[s._v("117")]),t("br"),t("span",{staticClass:"line-number"},[s._v("118")]),t("br"),t("span",{staticClass:"line-number"},[s._v("119")]),t("br"),t("span",{staticClass:"line-number"},[s._v("120")]),t("br"),t("span",{staticClass:"line-number"},[s._v("121")]),t("br"),t("span",{staticClass:"line-number"},[s._v("122")]),t("br"),t("span",{staticClass:"line-number"},[s._v("123")]),t("br"),t("span",{staticClass:"line-number"},[s._v("124")]),t("br"),t("span",{staticClass:"line-number"},[s._v("125")]),t("br"),t("span",{staticClass:"line-number"},[s._v("126")]),t("br"),t("span",{staticClass:"line-number"},[s._v("127")]),t("br"),t("span",{staticClass:"line-number"},[s._v("128")]),t("br"),t("span",{staticClass:"line-number"},[s._v("129")]),t("br"),t("span",{staticClass:"line-number"},[s._v("130")]),t("br"),t("span",{staticClass:"line-number"},[s._v("131")]),t("br"),t("span",{staticClass:"line-number"},[s._v("132")]),t("br"),t("span",{staticClass:"line-number"},[s._v("133")]),t("br"),t("span",{staticClass:"line-number"},[s._v("134")]),t("br"),t("span",{staticClass:"line-number"},[s._v("135")]),t("br"),t("span",{staticClass:"line-number"},[s._v("136")]),t("br"),t("span",{staticClass:"line-number"},[s._v("137")]),t("br"),t("span",{staticClass:"line-number"},[s._v("138")]),t("br"),t("span",{staticClass:"line-number"},[s._v("139")]),t("br"),t("span",{staticClass:"line-number"},[s._v("140")]),t("br"),t("span",{staticClass:"line-number"},[s._v("141")]),t("br"),t("span",{staticClass:"line-number"},[s._v("142")]),t("br"),t("span",{staticClass:"line-number"},[s._v("143")]),t("br"),t("span",{staticClass:"line-number"},[s._v("144")]),t("br"),t("span",{staticClass:"line-number"},[s._v("145")]),t("br"),t("span",{staticClass:"line-number"},[s._v("146")]),t("br"),t("span",{staticClass:"line-number"},[s._v("147")]),t("br"),t("span",{staticClass:"line-number"},[s._v("148")]),t("br"),t("span",{staticClass:"line-number"},[s._v("149")]),t("br"),t("span",{staticClass:"line-number"},[s._v("150")]),t("br"),t("span",{staticClass:"line-number"},[s._v("151")]),t("br"),t("span",{staticClass:"line-number"},[s._v("152")]),t("br"),t("span",{staticClass:"line-number"},[s._v("153")]),t("br"),t("span",{staticClass:"line-number"},[s._v("154")]),t("br"),t("span",{staticClass:"line-number"},[s._v("155")]),t("br"),t("span",{staticClass:"line-number"},[s._v("156")]),t("br"),t("span",{staticClass:"line-number"},[s._v("157")]),t("br"),t("span",{staticClass:"line-number"},[s._v("158")]),t("br"),t("span",{staticClass:"line-number"},[s._v("159")]),t("br"),t("span",{staticClass:"line-number"},[s._v("160")]),t("br"),t("span",{staticClass:"line-number"},[s._v("161")]),t("br"),t("span",{staticClass:"line-number"},[s._v("162")]),t("br"),t("span",{staticClass:"line-number"},[s._v("163")]),t("br"),t("span",{staticClass:"line-number"},[s._v("164")]),t("br"),t("span",{staticClass:"line-number"},[s._v("165")]),t("br"),t("span",{staticClass:"line-number"},[s._v("166")]),t("br"),t("span",{staticClass:"line-number"},[s._v("167")]),t("br"),t("span",{staticClass:"line-number"},[s._v("168")]),t("br"),t("span",{staticClass:"line-number"},[s._v("169")]),t("br"),t("span",{staticClass:"line-number"},[s._v("170")]),t("br"),t("span",{staticClass:"line-number"},[s._v("171")]),t("br"),t("span",{staticClass:"line-number"},[s._v("172")]),t("br"),t("span",{staticClass:"line-number"},[s._v("173")]),t("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{363:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration.b7bcc85b.png"},364:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-debug.223a3034.png"},365:function(s,t){s.exports="data:image/png;base64,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"},366:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-debug3.be5f1c56.png"},367:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-process.f067ee5a.png"},368:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-gauge.d54f29fc.png"},369:function(s,t){s.exports="data:image/png;base64,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"},370:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-chart.b3fd693b.png"},371:function(s,t){s.exports="data:image/png;base64,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"},372:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-flow-BLE-temperature.188db207.png"},432:function(s,t,a){"use strict";a.r(t);var n=a(14),r=Object(n.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"integrate-node-red"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#integrate-node-red"}},[s._v("#")]),s._v(" Integrate Node-Red")]),s._v(" "),t("h2",{attrs:{id:"integrate-ble-sensors-devices-and-display-a-dashboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#integrate-ble-sensors-devices-and-display-a-dashboard"}},[s._v("#")]),s._v(" Integrate BLE sensors, devices and display a dashboard")]),s._v(" "),t("p",[s._v("Prerequisites: node-red, node-red-dashboard")]),s._v(" "),t("h3",{attrs:{id:"broker-connection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#broker-connection"}},[s._v("#")]),s._v(" Broker connection")]),s._v(" "),t("ul",[t("li",[s._v("Add a new "),t("code",[s._v("mqtt in")]),s._v(" node")]),s._v(" "),t("li",[s._v("Click 2 times on it")]),s._v(" "),t("li",[s._v("Add a new broker or connect to an existing one (server field)")]),s._v(" "),t("li",[s._v("Set the topic like below with the MAC address at the end being the one of the device you want to integrate")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(363),alt:"NodeRed integration"}})]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),t("p",[s._v('The "+" enables to process the data from all the gateways whatever name they have. So you may setup several OpenMQTTGateway, you will not have to change the Node-Red configuration.')])]),s._v(" "),t("p",[s._v("This configuration enables to process all the data coming from the sensor.")]),s._v(" "),t("ul",[t("li",[s._v("Click on done")]),s._v(" "),t("li",[s._v("So as to monitor the traffic coming; you can add a debug node with "),t("em",[s._v("msg.payload")]),s._v(" as Output")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(364),alt:"NodeRed integration"}})]),s._v(" "),t("ul",[t("li",[s._v("Link it to the "),t("code",[s._v("mqtt in")]),s._v(" node")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(365),alt:"NodeRed integration"}})]),s._v(" "),t("ul",[t("li",[s._v("Deploy")]),s._v(" "),t("li",[s._v("Open the debug panel")]),s._v(" "),t("li",[s._v("You should see messages coming when the gateway will receive data")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(366),alt:"NodeRed integration"}})]),s._v(" "),t("h3",{attrs:{id:"json-message-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#json-message-processing"}},[s._v("#")]),s._v(" Json message processing")]),s._v(" "),t("p",[s._v("We need to process the json message so as to extract the value that we want to display.")]),s._v(" "),t("ul",[t("li",[s._v("Add a "),t("code",[s._v("change")]),s._v(" node")]),s._v(" "),t("li",[s._v("Configure it as "),t("code",[s._v("Move")])]),s._v(" "),t("li",[s._v("Add the msg value you would like to process example "),t("em",[s._v("msg.payload.tempc")]),s._v(" and the target "),t("em",[s._v("msg.payload")])])]),s._v(" "),t("p",[t("img",{attrs:{src:a(367),alt:"NodeRed integration"}})]),s._v(" "),t("ul",[t("li",[s._v("Connect the "),t("code",[s._v("change")]),s._v(" node to the "),t("code",[s._v("mqtt in")]),s._v(" node")])]),s._v(" "),t("h3",{attrs:{id:"dashboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dashboard"}},[s._v("#")]),s._v(" Dashboard")]),s._v(" "),t("p",[s._v("You can now add widget so as to display the value processed above")]),s._v(" "),t("ul",[t("li",[s._v("Add a "),t("code",[s._v("gauge")]),s._v(" node")]),s._v(" "),t("li",[s._v("Add a group and organize your dashboard")]),s._v(" "),t("li",[s._v("Add your value format to process the payload like below")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(368),alt:"NodeRed integration"}})]),s._v(" "),t("ul",[t("li",[s._v("Click on Done")]),s._v(" "),t("li",[s._v("Deploy")]),s._v(" "),t("li",[s._v("Go to your "),t("code",[s._v("node-red url")]),s._v("/ui")])]),s._v(" "),t("p",[s._v("You should see the gauge with the last value displayed")]),s._v(" "),t("p",[t("img",{attrs:{src:a(369),alt:"NodeRed integration"}})]),s._v(" "),t("p",[s._v("You can also add easily a chart node:")]),s._v(" "),t("p",[t("img",{attrs:{src:a(370),alt:"NodeRed integration"}})]),s._v(" "),t("p",[t("img",{attrs:{src:a(371),alt:"NodeRed integration"}})]),s._v(" "),t("p",[s._v("Or a function with a notification:")]),s._v(" "),t("p",[t("img",{attrs:{src:a(372),alt:"NodeRed integration"}})]),s._v(" "),t("h2",{attrs:{id:"integrate-rf"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#integrate-rf"}},[s._v("#")]),s._v(" Integrate RF")]),s._v(" "),t("p",[s._v("Here is a simple set of flows for integrating OpenMQTTGateway with NodeRED via an ESP8266 module.")]),s._v(" "),t("p",[s._v("In this example I have used a Wemos D1 Mini with some cheap RF modules.")]),s._v(" "),t("p",[t("img",{attrs:{src:"https://i.imgur.com/z2RFvUw.jpg",alt:"NodeRed integration"}})]),s._v(" "),t("p",[s._v("A flow to receive 433MHz signals into NodeRED (you will need to update the IP address of your broker)")]),s._v(" "),t("p",[t("img",{attrs:{src:"https://i.imgur.com/2UWYzHg.jpg",alt:"NodeRed integration"}})]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6d1b2915.7ce798"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mqtt in"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"433MQTT"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"topic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"home/OpenMQTTGateway/433toMQTT"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"qos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"broker"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4572f098.cc1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("80")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("740")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"fe53b819.4f9568"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"fe53b819.4f9568"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"debug"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"active"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tosidebar"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"console"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tostatus"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"complete"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("290")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("740")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4572f098.cc1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mqtt-broker"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"broker"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"192.168.0.56"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1883"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"clientid"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"usetls"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"compatmode"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"keepalive"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"60"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cleansession"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willTopic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willQos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willRetain"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"false"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willPayload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthTopic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthQos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthRetain"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"false"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthPayload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br"),t("span",{staticClass:"line-number"},[s._v("40")]),t("br"),t("span",{staticClass:"line-number"},[s._v("41")]),t("br"),t("span",{staticClass:"line-number"},[s._v("42")]),t("br"),t("span",{staticClass:"line-number"},[s._v("43")]),t("br"),t("span",{staticClass:"line-number"},[s._v("44")]),t("br"),t("span",{staticClass:"line-number"},[s._v("45")]),t("br"),t("span",{staticClass:"line-number"},[s._v("46")]),t("br"),t("span",{staticClass:"line-number"},[s._v("47")]),t("br"),t("span",{staticClass:"line-number"},[s._v("48")]),t("br"),t("span",{staticClass:"line-number"},[s._v("49")]),t("br"),t("span",{staticClass:"line-number"},[s._v("50")]),t("br"),t("span",{staticClass:"line-number"},[s._v("51")]),t("br"),t("span",{staticClass:"line-number"},[s._v("52")]),t("br"),t("span",{staticClass:"line-number"},[s._v("53")]),t("br")])]),t("p",[s._v("A flow to send 433MHz signals from NodeRED")]),s._v(" "),t("p",[t("img",{attrs:{src:"https://i.imgur.com/PMlWyii.jpg",alt:"NodeRed integration"}})]),s._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ff924d56.459d6"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mqtt out"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MQTTto433"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"topic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"qos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"retain"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"broker"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4572f098.cc1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("610")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("860")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6c25a2d4.6c733c"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"inject"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"topic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"On"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"payloadType"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"repeat"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"crontab"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"once"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"onceDelay"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("90")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("840")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7689fe88.45679"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a76d2f03.5f3"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"change"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"rules"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"t"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"set"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"p"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"pt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"msg"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5510487"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tot"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"action"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"property"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"from"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"reg"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("380")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("840")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ff924d56.459d6"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7689fe88.45679"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"switch"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"property"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"propertyType"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"msg"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"rules"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"t"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"eq"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"v"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"On"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"vt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"t"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"eq"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"v"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Off"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"vt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"checkall"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"true"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"repair"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"outputs"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("210")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("860")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a76d2f03.5f3"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6a7c2c3a.567794"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7e52ec9.00dde14"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"inject"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"topic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Off"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"payloadType"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"repeat"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"crontab"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"once"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"onceDelay"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("90")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("880")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7689fe88.45679"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6a7c2c3a.567794"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"change"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"rules"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"t"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"set"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"p"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"pt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"msg"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4527444"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tot"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"str"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"action"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"property"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"from"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"reg"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("380")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("880")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ff924d56.459d6"')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"20991aea.cca8a6"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"comment"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"a9a9b76b.e69998"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Set you RF codes here."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"info"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("380")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"y"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("800")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"wires"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4572f098.cc1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mqtt-broker"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"z"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"broker"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"192.168.0.56"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1883"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"clientid"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"usetls"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"compatmode"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"keepalive"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"60"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cleansession"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willTopic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willQos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willRetain"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"false"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"willPayload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthTopic"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthQos"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthRetain"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"false"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[s._v('"birthPayload"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br"),t("span",{staticClass:"line-number"},[s._v("40")]),t("br"),t("span",{staticClass:"line-number"},[s._v("41")]),t("br"),t("span",{staticClass:"line-number"},[s._v("42")]),t("br"),t("span",{staticClass:"line-number"},[s._v("43")]),t("br"),t("span",{staticClass:"line-number"},[s._v("44")]),t("br"),t("span",{staticClass:"line-number"},[s._v("45")]),t("br"),t("span",{staticClass:"line-number"},[s._v("46")]),t("br"),t("span",{staticClass:"line-number"},[s._v("47")]),t("br"),t("span",{staticClass:"line-number"},[s._v("48")]),t("br"),t("span",{staticClass:"line-number"},[s._v("49")]),t("br"),t("span",{staticClass:"line-number"},[s._v("50")]),t("br"),t("span",{staticClass:"line-number"},[s._v("51")]),t("br"),t("span",{staticClass:"line-number"},[s._v("52")]),t("br"),t("span",{staticClass:"line-number"},[s._v("53")]),t("br"),t("span",{staticClass:"line-number"},[s._v("54")]),t("br"),t("span",{staticClass:"line-number"},[s._v("55")]),t("br"),t("span",{staticClass:"line-number"},[s._v("56")]),t("br"),t("span",{staticClass:"line-number"},[s._v("57")]),t("br"),t("span",{staticClass:"line-number"},[s._v("58")]),t("br"),t("span",{staticClass:"line-number"},[s._v("59")]),t("br"),t("span",{staticClass:"line-number"},[s._v("60")]),t("br"),t("span",{staticClass:"line-number"},[s._v("61")]),t("br"),t("span",{staticClass:"line-number"},[s._v("62")]),t("br"),t("span",{staticClass:"line-number"},[s._v("63")]),t("br"),t("span",{staticClass:"line-number"},[s._v("64")]),t("br"),t("span",{staticClass:"line-number"},[s._v("65")]),t("br"),t("span",{staticClass:"line-number"},[s._v("66")]),t("br"),t("span",{staticClass:"line-number"},[s._v("67")]),t("br"),t("span",{staticClass:"line-number"},[s._v("68")]),t("br"),t("span",{staticClass:"line-number"},[s._v("69")]),t("br"),t("span",{staticClass:"line-number"},[s._v("70")]),t("br"),t("span",{staticClass:"line-number"},[s._v("71")]),t("br"),t("span",{staticClass:"line-number"},[s._v("72")]),t("br"),t("span",{staticClass:"line-number"},[s._v("73")]),t("br"),t("span",{staticClass:"line-number"},[s._v("74")]),t("br"),t("span",{staticClass:"line-number"},[s._v("75")]),t("br"),t("span",{staticClass:"line-number"},[s._v("76")]),t("br"),t("span",{staticClass:"line-number"},[s._v("77")]),t("br"),t("span",{staticClass:"line-number"},[s._v("78")]),t("br"),t("span",{staticClass:"line-number"},[s._v("79")]),t("br"),t("span",{staticClass:"line-number"},[s._v("80")]),t("br"),t("span",{staticClass:"line-number"},[s._v("81")]),t("br"),t("span",{staticClass:"line-number"},[s._v("82")]),t("br"),t("span",{staticClass:"line-number"},[s._v("83")]),t("br"),t("span",{staticClass:"line-number"},[s._v("84")]),t("br"),t("span",{staticClass:"line-number"},[s._v("85")]),t("br"),t("span",{staticClass:"line-number"},[s._v("86")]),t("br"),t("span",{staticClass:"line-number"},[s._v("87")]),t("br"),t("span",{staticClass:"line-number"},[s._v("88")]),t("br"),t("span",{staticClass:"line-number"},[s._v("89")]),t("br"),t("span",{staticClass:"line-number"},[s._v("90")]),t("br"),t("span",{staticClass:"line-number"},[s._v("91")]),t("br"),t("span",{staticClass:"line-number"},[s._v("92")]),t("br"),t("span",{staticClass:"line-number"},[s._v("93")]),t("br"),t("span",{staticClass:"line-number"},[s._v("94")]),t("br"),t("span",{staticClass:"line-number"},[s._v("95")]),t("br"),t("span",{staticClass:"line-number"},[s._v("96")]),t("br"),t("span",{staticClass:"line-number"},[s._v("97")]),t("br"),t("span",{staticClass:"line-number"},[s._v("98")]),t("br"),t("span",{staticClass:"line-number"},[s._v("99")]),t("br"),t("span",{staticClass:"line-number"},[s._v("100")]),t("br"),t("span",{staticClass:"line-number"},[s._v("101")]),t("br"),t("span",{staticClass:"line-number"},[s._v("102")]),t("br"),t("span",{staticClass:"line-number"},[s._v("103")]),t("br"),t("span",{staticClass:"line-number"},[s._v("104")]),t("br"),t("span",{staticClass:"line-number"},[s._v("105")]),t("br"),t("span",{staticClass:"line-number"},[s._v("106")]),t("br"),t("span",{staticClass:"line-number"},[s._v("107")]),t("br"),t("span",{staticClass:"line-number"},[s._v("108")]),t("br"),t("span",{staticClass:"line-number"},[s._v("109")]),t("br"),t("span",{staticClass:"line-number"},[s._v("110")]),t("br"),t("span",{staticClass:"line-number"},[s._v("111")]),t("br"),t("span",{staticClass:"line-number"},[s._v("112")]),t("br"),t("span",{staticClass:"line-number"},[s._v("113")]),t("br"),t("span",{staticClass:"line-number"},[s._v("114")]),t("br"),t("span",{staticClass:"line-number"},[s._v("115")]),t("br"),t("span",{staticClass:"line-number"},[s._v("116")]),t("br"),t("span",{staticClass:"line-number"},[s._v("117")]),t("br"),t("span",{staticClass:"line-number"},[s._v("118")]),t("br"),t("span",{staticClass:"line-number"},[s._v("119")]),t("br"),t("span",{staticClass:"line-number"},[s._v("120")]),t("br"),t("span",{staticClass:"line-number"},[s._v("121")]),t("br"),t("span",{staticClass:"line-number"},[s._v("122")]),t("br"),t("span",{staticClass:"line-number"},[s._v("123")]),t("br"),t("span",{staticClass:"line-number"},[s._v("124")]),t("br"),t("span",{staticClass:"line-number"},[s._v("125")]),t("br"),t("span",{staticClass:"line-number"},[s._v("126")]),t("br"),t("span",{staticClass:"line-number"},[s._v("127")]),t("br"),t("span",{staticClass:"line-number"},[s._v("128")]),t("br"),t("span",{staticClass:"line-number"},[s._v("129")]),t("br"),t("span",{staticClass:"line-number"},[s._v("130")]),t("br"),t("span",{staticClass:"line-number"},[s._v("131")]),t("br"),t("span",{staticClass:"line-number"},[s._v("132")]),t("br"),t("span",{staticClass:"line-number"},[s._v("133")]),t("br"),t("span",{staticClass:"line-number"},[s._v("134")]),t("br"),t("span",{staticClass:"line-number"},[s._v("135")]),t("br"),t("span",{staticClass:"line-number"},[s._v("136")]),t("br"),t("span",{staticClass:"line-number"},[s._v("137")]),t("br"),t("span",{staticClass:"line-number"},[s._v("138")]),t("br"),t("span",{staticClass:"line-number"},[s._v("139")]),t("br"),t("span",{staticClass:"line-number"},[s._v("140")]),t("br"),t("span",{staticClass:"line-number"},[s._v("141")]),t("br"),t("span",{staticClass:"line-number"},[s._v("142")]),t("br"),t("span",{staticClass:"line-number"},[s._v("143")]),t("br"),t("span",{staticClass:"line-number"},[s._v("144")]),t("br"),t("span",{staticClass:"line-number"},[s._v("145")]),t("br"),t("span",{staticClass:"line-number"},[s._v("146")]),t("br"),t("span",{staticClass:"line-number"},[s._v("147")]),t("br"),t("span",{staticClass:"line-number"},[s._v("148")]),t("br"),t("span",{staticClass:"line-number"},[s._v("149")]),t("br"),t("span",{staticClass:"line-number"},[s._v("150")]),t("br"),t("span",{staticClass:"line-number"},[s._v("151")]),t("br"),t("span",{staticClass:"line-number"},[s._v("152")]),t("br"),t("span",{staticClass:"line-number"},[s._v("153")]),t("br"),t("span",{staticClass:"line-number"},[s._v("154")]),t("br"),t("span",{staticClass:"line-number"},[s._v("155")]),t("br"),t("span",{staticClass:"line-number"},[s._v("156")]),t("br"),t("span",{staticClass:"line-number"},[s._v("157")]),t("br"),t("span",{staticClass:"line-number"},[s._v("158")]),t("br"),t("span",{staticClass:"line-number"},[s._v("159")]),t("br"),t("span",{staticClass:"line-number"},[s._v("160")]),t("br"),t("span",{staticClass:"line-number"},[s._v("161")]),t("br"),t("span",{staticClass:"line-number"},[s._v("162")]),t("br"),t("span",{staticClass:"line-number"},[s._v("163")]),t("br"),t("span",{staticClass:"line-number"},[s._v("164")]),t("br"),t("span",{staticClass:"line-number"},[s._v("165")]),t("br"),t("span",{staticClass:"line-number"},[s._v("166")]),t("br"),t("span",{staticClass:"line-number"},[s._v("167")]),t("br"),t("span",{staticClass:"line-number"},[s._v("168")]),t("br"),t("span",{staticClass:"line-number"},[s._v("169")]),t("br"),t("span",{staticClass:"line-number"},[s._v("170")]),t("br"),t("span",{staticClass:"line-number"},[s._v("171")]),t("br"),t("span",{staticClass:"line-number"},[s._v("172")]),t("br"),t("span",{staticClass:"line-number"},[s._v("173")]),t("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/18.42cba936.js b/dev/assets/js/18.972dca58.js similarity index 98% rename from dev/assets/js/18.42cba936.js rename to dev/assets/js/18.972dca58.js index 684b97e6..2fc78c5a 100644 --- a/dev/assets/js/18.42cba936.js +++ b/dev/assets/js/18.972dca58.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{396:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-sensors-ble.0fac0ddf.png"},397:function(e,t,a){e.exports=a.p+"assets/img/Theengs-Bridge-ble-gateway.659243b3.png"},398:function(e,t,a){e.exports=a.p+"assets/img/Theengs-Plug-OpenMQTTGateway.b78a5091.png"},399:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-mqtt-explorer-lywsd03mmc-atc.373ae7bf.png"},400:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-home-assistant-chart.d38cbd0f.png"},401:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-BLE-tracker-Home-Assistant.158960f9.png"},402:function(e,t,a){e.exports=a.p+"assets/img/KBeacon-app-configuration-moving.ddd3b980.jpg"},403:function(e,t,a){e.exports=a.p+"assets/img/KBeacon-app-configuration-moving2.5530d66f.jpg"},458:function(e,t,a){"use strict";a.r(t);var s=a(14),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"bluetooth-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bluetooth-gateway"}},[e._v("#")]),e._v(" Bluetooth gateway")]),e._v(" "),t("p",[e._v("The manufacturer agnostic Bluetooth Low Energy (BLE) gateway acts as a powerful BLE scanner and decoder of "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/devices/ble-devices/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bluetooth devices"),t("OutboundLink")],1),e._v(", allowing you to visualize and analyze information from a wide range of sensors.\nIt can also act as a device tracker and presence detection gateway by receiving nearby BLE devices and trackers.")]),e._v(" "),t("p",[e._v("Data are transmitted to an MQTT broker, where it can be used to trigger events and rules, as well as displayed, stored and processed in your favorite controller (Home Assistant, OpenHAB, Jeedom, Domoticz, ioBroker or any MQTT compatible software).")]),e._v(" "),t("p",[e._v("With the ability to monitor and analyze data such as temperature, humidity, moisture, luminance, weight, pressure, fine particles, and more, the BLE gateway provides a flexible and customizable solution for integrating BLE technology into your control and monitoring systems.")]),e._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("img",{staticStyle:{"max-width":"100%",height:"auto"},attrs:{src:a(396),alt:"BLE sensors and devices"}})]),e._v(" "),t("h2",{attrs:{id:"products-powered-by-openmqttgateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#products-powered-by-openmqttgateway"}},[e._v("#")]),e._v(" Products powered by OpenMQTTGateway")]),e._v(" "),t("h3",{attrs:{id:"theengs-bridge-ble-gateway-with-external-antenna"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#theengs-bridge-ble-gateway-with-external-antenna"}},[e._v("#")]),e._v(" Theengs Bridge, BLE gateway with external antenna")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antenna",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs bridge"),t("OutboundLink")],1),e._v(" is a powerfull BLE to MQTT gateway for over "),t("a",{attrs:{href:"https://decoder.theengs.io/devices/devices.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("100 sensors"),t("OutboundLink")],1),e._v(". Equipped with an Ethernet port, and external antenna, ensuring an enhanced range for your BLE sensors. It supports also WiFi connectivity.")]),e._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antenna",target:"_blank",rel:"noopener noreferrer"}},[t("img",{staticStyle:{"max-width":"100%",height:"auto"},attrs:{src:a(397),alt:"Theengs bridge view"}})])]),e._v(" "),t("h3",{attrs:{id:"theengs-plug-ble-gateway-and-smart-plug"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#theengs-plug-ble-gateway-and-smart-plug"}},[e._v("#")]),e._v(" Theengs Plug, BLE gateway and Smart Plug")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumption",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs plug"),t("OutboundLink")],1),e._v(" brings the following features:")]),e._v(" "),t("ul",[t("li",[e._v("BLE to MQTT gateway, tens of "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/devices/ble-devices/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bluetooth devices"),t("OutboundLink")],1),e._v(" supported thanks to Theengs Decoder library. The plug uses an ESP32 acting as a BLE to Wifi gateway to scan, decode and forward the data of the nearby sensors,")]),e._v(" "),t("li",[e._v("Smart plug that can be controlled remotely,")]),e._v(" "),t("li",[e._v("Energy consumption monitoring,")]),e._v(" "),t("li",[e._v("Device tracker,")]),e._v(" "),t("li",[e._v("Presence detection (beta),")]),e._v(" "),t("li",[e._v("Local connectivity first.")])]),e._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumption",target:"_blank",rel:"noopener noreferrer"}},[t("img",{staticStyle:{"max-width":"100%",height:"auto"},attrs:{src:a(398),alt:"Theengs plug view"}})])]),e._v(" "),t("p",[e._v("Support the project by purchasing the "),t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antenna",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs bridge"),t("OutboundLink")],1),e._v(" or the "),t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumption",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs plug"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"disable-or-enable-the-ble-gateway-default-true-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disable-or-enable-the-ble-gateway-default-true-available-with-ha-discovery"}},[e._v("#")]),e._v(" Disable or enable the BLE gateway (default: true, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to deactivate the BLE gateway:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"enabled\":false}'")])]),e._v(" "),t("p",[e._v("If you want to activate the BLE gateway:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"enabled\":true}'")])]),e._v(" "),t("h2",{attrs:{id:"receiving-signals-from-compatible-ble-sensors-to-publish-it-to-an-mqtt-broker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-signals-from-compatible-ble-sensors-to-publish-it-to-an-mqtt-broker"}},[e._v("#")]),e._v(" Receiving signals from "),t("a",{attrs:{href:"https://decoder.theengs.io/devices/devices_by_brand.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("compatible BLE sensors"),t("OutboundLink")],1),e._v(" to publish it to an MQTT broker.")]),e._v(" "),t("p",[e._v("To receive data from BLE sensors you can use an ESP32-based device with a programming USB port or use a Serial adapter.")]),e._v(" "),t("p",[e._v("OpenMQTTGateway is also available preloaded and configured with the "),t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumption",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs plug"),t("OutboundLink")],1),e._v(", a smart plug that acts as a BLE gateway and energy monitoring device.")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Follow the "),t("RouterLink",{attrs:{to:"/upload/web-install.html"}},[e._v("Upload")]),e._v(" and "),t("RouterLink",{attrs:{to:"/upload/portal.html"}},[e._v("Configuration")]),e._v(" steps.")],1)]),e._v(" "),t("li",[t("p",[e._v("Download an MQTT client like MQTT explorer.")])]),e._v(" "),t("li",[t("p",[e._v("You should see data coming in your broker.")])])]),e._v(" "),t("p",[t("img",{attrs:{src:a(399),alt:"LYWSD03MMC MQTT data view"}})]),e._v(" "),t("p",[e._v("Once the data has been transmitted to the MQTT broker, it can be easily integrated with your preferred controller. For example, the data can be automatically discovered and made available within popular controllers, example below with Home Assistant.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(400),alt:"Home Assistant chart"}})]),e._v(" "),t("p",[e._v("Examples of compatible sensors among [our list](https://decoder.theengs.io/devices/devices_by_brand.html: Mi Flora, Mi jia, LYWDS02, LYWSD03MMC, ClearGrass, Mi scale, iBBQ, TPMS")]),e._v(" "),t("h2",{attrs:{id:"receiving-signals-from-ble-devices-for-device-tracker-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-signals-from-ble-devices-for-device-tracker-detection"}},[e._v("#")]),e._v(" Receiving signals from BLE devices for Device Tracker detection")]),e._v(" "),t("p",[e._v("The gateway will detect BLE trackers from Tile, Nut, TagIt, iTAG, Gigaset G-Tag, TicWatch GTH (Pro), Teltonika FMT100 vehicle tracker and Bosch Nyon eBike computers, as well as other devices with additional properties decoding like Mi Band, Amazfit, RuuviTag and others indicated as Device Trackers in the "),t("a",{attrs:{href:"https://decoder.theengs.io/devices/devices.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("compatible BLE devices list"),t("OutboundLink")],1),e._v(", and automatically create a device tracker entity following the Home Assistant discovery convention (if auto discovery is activated).")]),e._v(" "),t("p",[e._v("The devicen tracker entity created can be attached to a person to leverage presence detection. The "),t("code",[e._v("away")]),e._v(" or "),t("code",[e._v("not home")]),e._v(" state is triggered if the BLE tracker is not detected during the timer defined by "),t("code",[e._v("presenceawaytimer")]),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:a(401),alt:"Away home Home assistant view"}})]),e._v(" "),t("p",[e._v("By default "),t("code",[e._v("presenceawaytimer")]),e._v(" is set to 120s, you can change it from the slider in your controller or with the following command (ms)")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"presenceawaytimer\":66000}'")])]),e._v(" "),t("p",[e._v("Generally BLE devices will not broadcast if they are paired so you may need to ensure your beacons is unpaired/disconnected before it will be seen by the gateway.")]),e._v(" "),t("p",[e._v("Note that you can find apps to simulate beacons and do some tests like "),t("a",{attrs:{href:"https://play.google.com/store/apps/details?id=net.alea.beaconsimulator",target:"_blank",rel:"noopener noreferrer"}},[e._v("Beacon simulator"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("Apple iOS version >=10 devices advertise without an extra MAC address app, nevertheless this address "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/issues/71",target:"_blank",rel:"noopener noreferrer"}},[e._v("changes randomly"),t("OutboundLink")],1),e._v(" and can currently only be used with "),t("a",{attrs:{href:"https://gateway.theengs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs Gateway"),t("OutboundLink")],1),e._v(" and its "),t("a",{attrs:{href:"https://gateway.theengs.io/use/use.html#getting-identity-resolving-key-irk-for-apple-watch-iphone-and-ipad",target:"_blank",rel:"noopener noreferrer"}},[e._v("Identity MAC Address and Identity Resolving Key"),t("OutboundLink")],1),e._v(" feature.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("INFO")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("presenceawaytimer")]),e._v(" is also used to reset the state of the PIR/motion sensors to "),t("code",[e._v("off")]),e._v(" when using HA MQTT discovery convention. If the Sensor does not detect a motion, its state will be automatically set to "),t("code",[e._v("off")]),e._v(" after the "),t("code",[e._v("presenceawaytimer")]),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"receiving-signals-from-ble-devices-for-presence-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-signals-from-ble-devices-for-presence-detection"}},[e._v("#")]),e._v(" Receiving signals from BLE devices for Presence detection")]),e._v(" "),t("p",[e._v('To do this activate the "BT: Publish HASS presence" switch in your controller or send the following MQTT command to your broker: mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"hasspresence":true}\'')]),e._v(" "),t("h2",{attrs:{id:"receiving-signals-from-ble-devices-with-accelerometers-for-movement-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-signals-from-ble-devices-with-accelerometers-for-movement-detection"}},[e._v("#")]),e._v(" Receiving signals from BLE devices with accelerometers for movement detection")]),e._v(" "),t("p",[e._v("The gateway is designed to detect BLE trackers from BlueCharm and automatically create a binary sensor entity in accordance with the Home Assistant discovery convention, provided that auto discovery is enabled.")]),e._v(" "),t("p",[e._v("The binary sensor entity's state will be set to on or off based on whether the BLE beacon's x-axis acceleration value is detected during the time period defined by the movingtimer parameter.")]),e._v(" "),t("p",[e._v("By default, the movingtimer parameter is set to 60 seconds (60,000 ms). To modify this value, use the following command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"movingtimer\":66000}'")])]),e._v(" "),t("p",[e._v("To ensure proper functionality, configure the beacon using the KBeacon or KBeaconPro app (depending on your specific sensor) with the following settings:")]),e._v(" "),t("ul",[t("li",[e._v('In the General tab, set the Trigger Command to "motion".')]),e._v(" "),t("li",[e._v('In the Slot tab, enable advertisement with the Beacon Type set to "KSensor", the Trigger Only Advertisement option set to "YES", and the Sensor Axis set to "ON".')])]),e._v(" "),t("p",[t("img",{attrs:{src:a(402),alt:"KBeacon trigger settings"}})]),e._v(" "),t("p",[t("img",{attrs:{src:a(403),alt:"KBeacon details"}})]),e._v(" "),t("h2",{attrs:{id:"setting-a-white-or-black-list"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-a-white-or-black-list"}},[e._v("#")]),e._v(" Setting a white or black list")]),e._v(" "),t("p",[e._v("A black list is a list of MAC addresses that will never be published by OMG\nto set black list\n"),t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"black-list":["01:23:14:55:16:15","4C:65:77:88:9C:79","4C:65:A6:66:3C:79"]}\'')])]),e._v(" "),t("p",[e._v("A white list is a list of MAC addresses permitted to be published by OMG\nto set white list\n"),t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"white-list":["01:23:14:55:16:15","4C:65:77:88:9C:79","4C:65:A6:66:3C:79"]}\'')])]),e._v(" "),t("p",[e._v("to temporarily disable white/black list\n"),t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"ignoreWBlist\":true}'")])]),e._v(" "),t("p",[e._v("to enable white/black list back\n"),t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"ignoreWBlist\":false}'")])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("So as to keep your white/black list persistent you can publish it with the retain option of MQTT (-r with mosquitto_pub or retain check box of MQTT Explorer)\n"),t("code",[e._v('mosquitto_pub -r -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"white-list":["01:23:14:55:16:15","4C:65:77:88:9C:79","4C:65:A6:66:3C:79"]}\'')])]),e._v(" "),t("p",[t("strong",[e._v("NOTE")]),e._v(": Only when sending a white/black list should the retain option be set. All other commands to any OpenMQTTGateway gateway "),t("strong",[e._v("must not")]),e._v(" have the retain option set. To persist such other command settings, read "),t("a",{attrs:{href:"https://docs.openmqttgateway.com/use/ble.html#store-ble-configuration-into-the-gateway",target:"_blank",rel:"noopener noreferrer"}},[e._v("the following section"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"setting-the-time-between-ble-scans-and-force-a-scan-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-time-between-ble-scans-and-force-a-scan-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting the time between BLE scans and force a scan (available with HA discovery)")]),e._v(" "),t("p",[e._v("Example if you want the BLE to scan every 66 seconds:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"interval\":66000}'")])]),e._v(" "),t("p",[e._v("you can also force a scan to be done by the following command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"interval\":0}'")])]),e._v(" "),t("p",[e._v("Changing the interval between scans will deactivate adaptive scanning.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("With Home Assistant, this command is directly available through MQTT auto discovery as a switch into the HASS OpenMQTTGateway device entities list.")])]),e._v(" "),t("p",[e._v("Once the forced scan has completed, the previous scan interval value will be restored. Forcing a scan command trigger also a BLE connect process after the scan (see below).")]),e._v(" "),t("p",[e._v("The default value "),t("code",[e._v("TimeBtwRead")]),e._v(" is set into config_BT.h or into your .ini file for platformio users.")]),e._v(" "),t("p",[e._v("If you want to scan continuously for BLE devices, for example for beacon location you can set the interval to 100ms:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"interval\":100}'")])]),e._v(" "),t("p",[e._v("In this case you should deactivate the BLE connection mechanism to avoid concurrency between scan and connections (see chapter below, bleconnect).")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("For certain devices like LYWSD03MMC OpenMQTTGateway use a connection (due to the fact that the advertized data are encrypted), this connection mechanism is launched after every "),t("code",[e._v("TimeBtwConnect")]),e._v(" per default, you can modify it by following the procedure below.")])]),e._v(" "),t("h2",{attrs:{id:"setting-the-time-between-connection-attempts-default-60min-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-time-between-connection-attempts-default-60min-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting the time between connection attempts (default: 60min, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to change the time between BLE connect you can change it by MQTT, if you want the BLE connect time to be every 300s:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"intervalcnct\":300000}'")])]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-publishes-all-the-ble-devices-scanned-or-only-the-detected-sensors-default-false-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-publishes-all-the-ble-devices-scanned-or-only-the-detected-sensors-default-false-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting if the gateway publishes all the BLE devices scanned or only the detected sensors (default: false, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to change this characteristic:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"onlysensors\":true}'")])]),e._v(" "),t("p",[e._v("The gateway will publish only detected sensors and trackers like Mi Flora, Mi jia, Mi Band, LYWSD03MMC... or trackers like Tile, Nut, TagIt or iTag, and not any other other BLE devices. This is useful if you don't use the gateway for presence detection with unrecognised trackers.")]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-publishes-known-devices-which-randomly-change-their-mac-address-default-false"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-publishes-known-devices-which-randomly-change-their-mac-address-default-false"}},[e._v("#")]),e._v(" Setting if the gateway publishes known devices which randomly change their MAC address (default: false)")]),e._v(" "),t("p",[e._v("The default is false, as such changing MAC addresses cannot be related to specific devices.")]),e._v(" "),t("p",[e._v("If you want to change this characteristic:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"randommacs\":true}'")])]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-use-adaptive-scanning-default-true-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-use-adaptive-scanning-default-true-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting if the gateway use adaptive scanning (default: true, available with HA discovery)")]),e._v(" "),t("p",[e._v("Adaptive scanning lets the gateway decide for you the best passive "),t("code",[e._v("interval")]),e._v(" and active "),t("code",[e._v("intervalacts")]),e._v(" scan interval, depending on the characteristics of your devices.\nThe gateway retrieves your devices' information from "),t("a",{attrs:{href:"https://decoder.theengs.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs Decoder"),t("OutboundLink")],1),e._v(" and adapts its parameters accordingly if a device that requires it is detected.\nFor example a door or a PIR sensor will require continuous scanning, so if detected the gateway is going to reduce its time between scans to the minimum. Or your devices may also require active scanning to retrieve data, in this case the gateway will also trigger active scans at regular intervals.")]),e._v(" "),t("p",[e._v("If you want to change this characteristic (default:true):")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"adaptivescan\":false}'")])]),e._v(" "),t("p",[e._v("Setting Adaptive scanning to "),t("code",[e._v("false")]),e._v(" will automatically put the gateway to continuous active scanning if no additional manual changes have already been applied.")]),e._v(" "),t("p",[e._v("An overview with background information to better understand the different setting used:")]),e._v(" "),t("p",[t("strong",[e._v("Passive scanning:")]),e._v(" With this scanning mode the gateway picks up any freely available broadcasts sent out by devices, without any interaction with the devices. The interval for this is set with "),t("a",{attrs:{href:"#setting-the-time-between-ble-scans-and-force-a-scan"}},[e._v('{"interval":66000}')])]),e._v(" "),t("p",[t("strong",[e._v("Active scanning:")]),e._v(" With this scanning mode the gateway sends out requests for sensor broadcasts first, before then picking up the broadcast advertisement data. Some devices require this request before they send out all data in their broadcasts. The interval for this active scanning with request first is set by "),t("a",{attrs:{href:"#setting-the-time-between-active-scanning"}},[e._v('{"intervalacts":300000}')])]),e._v(" "),t("p",[e._v("Setting "),t("a",{attrs:{href:"#advanced-publishing-advertisement-and-advanced-data-default-false"}},[e._v("Publishing advertisement and advanced data")]),e._v(" to true will show you additional data about which of your devices require active scanning and/or continuous scanning, so that you can tune these setting to your devices and your individual requirements of their data.")]),e._v(" "),t("p",[t("strong",[e._v('"cont":true')]),e._v(' - the device requires continuous scanning. If passive ({"interval":100}) or active ({"intervalacts":100}) depends on the additional device specification.')]),e._v(" "),t("p",[t("strong",[e._v('"acts":true')]),e._v(" - the device requires active scanning to broadcast all of it's data for decoding.")]),e._v(" "),t("h2",{attrs:{id:"setting-the-time-between-active-scanning-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-time-between-active-scanning-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting the time between active scanning (available with HA discovery)")]),e._v(" "),t("p",[e._v("If you have passive scanning activated, but also have some devices which require active scanning, this defines the time interval between two intermittent active scans.")]),e._v(" "),t("p",[e._v("Example for setting the active scan interval time to every 5 minutes:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"intervalacts\":300000}'")])]),e._v(" "),t("p",[e._v("Changing the active scan interval will deactivate adaptive scanning.")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("The active scan interval "),t("code",[e._v("intervalacts")]),e._v(" can only bet set equal to or higher than the passive scan interval "),t("code",[e._v("interval")]),e._v(", as any lower value would not make any sense.")])]),e._v(" "),t("h2",{attrs:{id:"setting-the-duration-of-a-scan-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-duration-of-a-scan-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting the duration of a scan (available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to change the default duration of each scan cycle to 5 seconds")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"scanduration\":5000}'")])]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-connects-to-ble-devices-eligibles-default-true-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-connects-to-ble-devices-eligibles-default-true-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting if the gateway connects to BLE devices eligibles (default: true, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to change this characteristic:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"bleconnect\":false}'")])]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-publish-into-home-assistant-home-presence-topic-default-false-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-publish-into-home-assistant-home-presence-topic-default-false-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting if the gateway publish into Home Assistant Home presence topic (default: false, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to publish to Home Assistant presence topic, you can activate this function by the HASS interface (this command is auto discovered), "),t("RouterLink",{attrs:{to:"/integrate/home_assistant.html#mqtt-room-presence"}},[e._v("here is a yaml example")]),e._v(".\nOr by an MQTT command.")],1),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"hasspresence\":true}'")])]),e._v(" "),t("p",[e._v("To change presence publication topic, use this MQTT command:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"prestopic":"presence/"}\'')])]),e._v(" "),t("p",[e._v("To use iBeacon UUID for presence, instead of sender (random) MAC address, use this MQTT command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"presuseuuid\":true}'")])]),e._v(" "),t("p",[e._v("This will change usual payload for iBeacon from:\n"),t("code",[e._v('{"id":"60:87:57:4C:9B:C2","mac_type":1,"rssi":-78,"distance":7.85288,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}')]),e._v("\nTo:\n"),t("code",[e._v('{"id":"1de4b189115e45f6b44e509352269977","mac_type":1,"rssi":-78,"distance":7.85288,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66,"mac":"60:87:57:4C:9B:C2"}')]),e._v('\nNote: the MAC address is put in "mac" field.')]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-uses-ibeacon-uuid-as-topic-instead-of-random-mac-address-default-false"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-uses-ibeacon-uuid-as-topic-instead-of-random-mac-address-default-false"}},[e._v("#")]),e._v(" Setting if the gateway uses iBeacon UUID as topic, instead of (random) MAC address (default: false)")]),e._v(" "),t("p",[e._v("By default, iBeacon are published like other devices, using a topic based on the MAC address of the sender.\nBut modern phones randomize their Bluetooth MAC address making it difficult to track iBeacon.")]),e._v(" "),t("p",[e._v("For example, the 2 following messages corresponds to the same iBeacon, but with different MAC and topics:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/BTtoMQTT/58782076BC24 {"id":"58:78:20:76:BC:24","mac_type":1,"rssi":-79,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}\nhome/OpenMQTTGateway/BTtoMQTT/5210A84690AC {"id":"52:10:A8:46:90:AC","mac_type":1,"rssi":-77,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br")])]),t("p",[e._v("To use iBeacon UUID as topic, use this MQTT command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"pubuuid4topic\":true}'")])]),e._v(" "),t("p",[e._v("Resulting in such messages (for the same iBeacon as previously):")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/BTtoMQTT/1de4b189115e45f6b44e509352269977 {"id":"52:10:A8:46:90:AC","mac_type":1,"rssi":-76,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}\nhome/OpenMQTTGateway/BTtoMQTT/1de4b189115e45f6b44e509352269977 {"id":"7B:63:C6:82:DC:57","mac_type":1,"rssi":-83,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br")])]),t("h2",{attrs:{id:"setting-the-minimum-rssi-accepted-to-publish-device-data-default-100"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-minimum-rssi-accepted-to-publish-device-data-default-100"}},[e._v("#")]),e._v(" Setting the minimum RSSI accepted to publish device data (default:-100)")]),e._v(" "),t("p",[e._v("If you want to change the minimum RSSI value accepted for a device to be published, you can change it by MQTT. For example if you want to set -80")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"minrssi\":-80}'")])]),e._v(" "),t("p",[e._v("you can also accept all the devices by the following command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"minrssi\":-200}'")])]),e._v(" "),t("p",[e._v("The default value is set into config_BT.h")]),e._v(" "),t("h2",{attrs:{id:"store-ble-configuration-into-the-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#store-ble-configuration-into-the-gateway"}},[e._v("#")]),e._v(" Store BLE configuration into the gateway")]),e._v(" "),t("p",[e._v("OpenMQTTGateway has the capability to save the current configuration and reload it at startup.")]),e._v(" "),t("p",[e._v("To store the running configuration into the gateway, use the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"save\":true}'")])]),e._v(" "),t("p",[e._v("At any time, you can reload the stored configuration with the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"load\":true}'")])]),e._v(" "),t("p",[e._v("If you want to erase the stored configuration, use the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"erase\":true}'")]),e._v("\nNote that it will not change the running configuration, only ensure default configuration is used at next startup.")]),e._v(" "),t("p",[e._v("By the way, if you want to load the default built-in configuration (on any board, not only ESP32), use the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"init\":true}'")]),e._v("\nNote that it will not change the stored configuration, "),t("code",[e._v("erase")]),e._v(" or "),t("code",[e._v("save")]),e._v(" is still needed to overwrite the saved configuration.")]),e._v(" "),t("h2",{attrs:{id:"controlling-devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#controlling-devices"}},[e._v("#")]),e._v(" Controlling devices")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("To control devices reliably, set the interval between scans to at least 5 seconds and the scan duration to 1 second to ensure commands are successfully transmitted to your devices.")])]),e._v(" "),t("h2",{attrs:{id:"read-write-ble-characteristics-over-mqtt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#read-write-ble-characteristics-over-mqtt"}},[e._v("#")]),e._v(" Read/write BLE characteristics over MQTT")]),e._v(" "),t("p",[e._v("The gateway can read and write BLE characteristics from devices and provide the results in an MQTT message.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("These actions will be taken on the next BLE connection, which occurs after scanning and after the scan count is reached, "),t("a",{attrs:{href:"#setting-the-number-of-scans-between-connection-attempts"}},[e._v("see above to set this")]),e._v(".\nThis can be overridden by providing an (optional) parameter "),t("code",[e._v('"immediate": true')]),e._v(" within the command. This will cause the BLE scan to stop if currently in progress, allowing the command to be immediately processed. All other connection commands in queue will also be processed for the same device, commands for other devices will be deferred until the next normally scheduled connection.")]),e._v(" "),t("p",[t("strong",[e._v("Note")]),e._v(' Some devices need to have the MAC address type specified. You can find this type by checking the log/MQTT data and looking for "mac_type". The mac_type of your device can be seen by setting '),t("code",[e._v("pubadvdata")]),e._v(" to "),t("code",[e._v("true")]),e._v(" with an MQTT command (see Publishing advertisement data), or with the macro "),t("code",[e._v("pubBLEAdvData true")]),e._v(". By default the type is 0 but some devices use different type values. You must specify the correct type to connect successfully."),t("br"),e._v("\nTo specify the MAC address type add the parameter "),t("code",[e._v('"mac_type"')]),e._v(" to the command. For example "),t("code",[e._v('"mac_type": 1')]),e._v(" to connect with a device with the MAC address type of 1.")])]),e._v(" "),t("h3",{attrs:{id:"example-write-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-write-command"}},[e._v("#")]),e._v(" Example write command")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "ble_write_address":"AA:BB:CC:DD:EE:FF",\n "ble_write_service":"cba20d00-224d-11e6-9fb8-0002a5d5c51b",\n "ble_write_char":"cba20002-224d-11e6-9fb8-0002a5d5c51b",\n "ble_write_value":"TEST",\n "value_type":"STRING",\n "ttl":4,\n "immediate":true }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br")])]),t("p",[e._v("Response:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id":"AA:BB:CC:DD:EE:FF",\n "service":"cba20d00-224d-11e6-9fb8-0002a5d5c51b",\n "characteristic":"cba20002-224d-11e6-9fb8-0002a5d5c51b",\n "write":"TEST",\n "success":true\n}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br")])]),t("h3",{attrs:{id:"example-read-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-read-command"}},[e._v("#")]),e._v(" Example read command")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "ble_read_address":"AA:BB:CC:DD:EE:FF",\n "ble_read_service":"cba20d00-224d-11e6-9fb8-0002a5d5c51b",\n "ble_read_char":"cba20002-224d-11e6-9fb8-0002a5d5c51b",\n "value_type":"STRING",\n "ttl": 2 }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br")])]),t("p",[e._v("Response:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id":"AA:BB:CC:DD:EE:FF",\n "service":"cba20d00-224d-11e6-9fb8-0002a5d5c51b",\n "characteristic":"cba20002-224d-11e6-9fb8-0002a5d5c51b",\n "read":"TEST",\n "success":true\n}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("ttl")]),e._v(" parameter is the number of attempts to connect (defaults to 1), which occur after the BLE scan completes."),t("br"),e._v(" "),t("code",[e._v("value_type")]),e._v(" can be one of: STRING, HEX, INT, FLOAT. Default is STRING if omitted in the message.")])]),e._v(" "),t("h2",{attrs:{id:"switchbot-bot-control-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#switchbot-bot-control-available-with-ha-discovery"}},[e._v("#")]),e._v(" SwitchBot Bot control (available with HA discovery)")]),e._v(" "),t("p",[e._v("SwitchBot Bot devices are automatically discovered and available as a device in the Home Assistant Settings menu. The following commands are supported:")]),e._v(" "),t("ul",[t("li",[e._v("Press")]),e._v(" "),t("li",[e._v("On")]),e._v(" "),t("li",[e._v("Off")]),e._v(" "),t("li",[e._v("Up")]),e._v(" "),t("li",[e._v("Down")])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If the SwitchBot mode is changed the ESP32 must be restarted.")])]),e._v(" "),t("p",[e._v("The device can also be controlled over MQTT with a simplified BLE write command.")]),e._v(" "),t("h3",{attrs:{id:"set-the-switchbot-bot-state-to-on"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-bot-state-to-on"}},[e._v("#")]),e._v(" Set the SwitchBot Bot state to ON:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"X1",\n "cmd":"on",\n "id":"AA:BB:CC:DD:EE:FF"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-bot-state-to-off"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-bot-state-to-off"}},[e._v("#")]),e._v(" Set the SwitchBot Bot state to OFF:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"X1",\n "cmd":"off",\n "id":"AA:BB:CC:DD:EE:FF"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-bot-to-press"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-bot-to-press"}},[e._v("#")]),e._v(" Set the SwitchBot Bot to PRESS:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"X1",\n "cmd":"press",\n "id":"AA:BB:CC:DD:EE:FF"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-bot-to-go-up"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-bot-to-go-up"}},[e._v("#")]),e._v(" Set the SwitchBot Bot to go UP:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"X1",\n "cmd":"up",\n "id":"AA:BB:CC:DD:EE:FF"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-bot-to-go-down"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-bot-to-go-down"}},[e._v("#")]),e._v(" Set the SwitchBot Bot to go DOWN:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"X1",\n "cmd":"down",\n "id":"AA:BB:CC:DD:EE:FF"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("Response (assuming success):")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id":"AA:BB:CC:DD:EE:FF",\n "state":"on"\n}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])]),t("h2",{attrs:{id:"switchbot-blind-tilt-control-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#switchbot-blind-tilt-control-available-with-ha-discovery"}},[e._v("#")]),e._v(" SwitchBot Blind Tilt control (available with HA discovery)")]),e._v(" "),t("p",[e._v("SwitchBot Blind Tilt devices are automatically discovered and available as a device in the settings Home Assistant Settings menu. The following commands are supported:")]),e._v(" "),t("ul",[t("li",[e._v("Open")]),e._v(" "),t("li",[e._v("Close down")]),e._v(" "),t("li",[e._v("Set a percentage")])]),e._v(" "),t("p",[e._v("The device can also be controlled over MQTT with a simplified BLE write command.")]),e._v(" "),t("h3",{attrs:{id:"set-the-switchbot-blind-tilt-state-to-open"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-blind-tilt-state-to-open"}},[e._v("#")]),e._v(" Set the SwitchBot Blind Tilt state to OPEN:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W270160X",\n "tilt":"open",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-blind-tilt-state-to-close-down"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-blind-tilt-state-to-close-down"}},[e._v("#")]),e._v(" Set the SwitchBot Blind Tilt state to CLOSE_DOWN:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W270160X",\n "tilt":"close_down",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-blind-tilt-state-to-close-up"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-blind-tilt-state-to-close-up"}},[e._v("#")]),e._v(" Set the SwitchBot Blind Tilt state to CLOSE_UP:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W270160X",\n "tilt":"close_up",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-blind-tilt-state-to-a-percentage-0-100"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-blind-tilt-state-to-a-percentage-0-100"}},[e._v("#")]),e._v(" Set the SwitchBot Blind Tilt state to a percentage (0-100):")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W270160X",\n "tilt":55,\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-blind-tilt-to-stop"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-blind-tilt-to-stop"}},[e._v("#")]),e._v(" Set the SwitchBot Blind Tilt to Stop:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W270160X",\n "tilt":"stop",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"response-assuming-success"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#response-assuming-success"}},[e._v("#")]),e._v(" Response (assuming success):")]),e._v(" "),t("p",[e._v("The Switchbot Blind Tilt response :")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id":"AA:BB:CC:DD:EE:FF",\n "tilt":55,\n "open":90,\n "direction":"up"\n}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br")])]),t("h2",{attrs:{id:"switchbot-curtain-2-3-control-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#switchbot-curtain-2-3-control-available-with-ha-discovery"}},[e._v("#")]),e._v(" SwitchBot Curtain (2/3) control (available with HA discovery)")]),e._v(" "),t("p",[e._v("SwitchBot Curtain (2/3) devices are automatically discovered and available as a device in the settings Home Assistant Settings menu. The following commands are supported:")]),e._v(" "),t("ul",[t("li",[e._v("Set a percentage")])]),e._v(" "),t("p",[e._v("The device can also be controlled over MQTT with a simplified BLE write command.")]),e._v(" "),t("h3",{attrs:{id:"set-the-switchbot-curtain-state-to-open"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-curtain-state-to-open"}},[e._v("#")]),e._v(" Set the SwitchBot Curtain state to OPEN:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W070160X",\n "position":"open",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-curtain-state-to-close"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-curtain-state-to-close"}},[e._v("#")]),e._v(" Set the SwitchBot Curtain state to CLOSE:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W070160X",\n "position":"close",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-curtain-to-a-percentage-0-100"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-curtain-to-a-percentage-0-100"}},[e._v("#")]),e._v(" Set the SwitchBot Curtain to a percentage (0-100):")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W070160X",\n "position":55,\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-curtain-to-stop"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-curtain-to-stop"}},[e._v("#")]),e._v(" Set the SwitchBot Curtain to Stop:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W070160X",\n "position":"stop",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"response-assuming-success-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#response-assuming-success-2"}},[e._v("#")]),e._v(" Response (assuming success):")]),e._v(" "),t("p",[e._v("The Switchbot Curtain response :")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id":"AA:BB:CC:DD:EE:FF",\n "position":55,\n}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])]),t("h2",{attrs:{id:"advanced-setting-up-an-external-decoder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-setting-up-an-external-decoder"}},[e._v("#")]),e._v(" ADVANCED: Setting up an external decoder")]),e._v(" "),t("p",[e._v("This advanced option is used to publish raw radio frames on a specific topic to be decoded by an external decoder instead of the integrated one.")]),e._v(" "),t("p",[e._v("To enable external decoder:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"extDecoderEnable\":true}'")])]),e._v(" "),t("p",[e._v('To change the default external decoder topic to "undecoded":')]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"extDecoderTopic":"undecoded"}\'')])]),e._v(" "),t("h2",{attrs:{id:"advanced-filtering-out-connectable-devices-default-false"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-filtering-out-connectable-devices-default-false"}},[e._v("#")]),e._v(" ADVANCED: Filtering out connectable devices (default: false)")]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/integrate/openhab2.html"}},[e._v("With OpenHAB integration")]),e._v(", this configuration is highly recommended, otherwise you may encounter incomplete data.")],1),e._v(" "),t("p",[e._v("If you want to enable this feature:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"filterConnectable\":true}'")])]),e._v(" "),t("h2",{attrs:{id:"advanced-advertisement-and-advanced-data-default-false-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-advertisement-and-advanced-data-default-false-available-with-ha-discovery"}},[e._v("#")]),e._v(" ADVANCED: Advertisement and advanced data (default: false, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to enable this feature:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"pubadvdata\":true}'")])]),e._v(" "),t("p",[e._v("This will publish extensive information about the device:")]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"11:22:33:44:55:66"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"mac_type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"adv_type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Qingping Motion & Light"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"rssi"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("-93")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"servicedata"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"88121122334455660201520f0126090403000000"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"servicedatauuid"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0xfdcd"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"brand"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Qingping"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"model"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Motion & Light"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"model_id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"CGPR1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"lux"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"batt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("82")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("To stop publishing advertisement data:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"pubadvdata\":false}'")])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.")])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("We strongly encourage the use of a white-list (see below) so as to collect data from your devices only and not from other MAC addresses.\nBy default the gateway scans the advertizing BLE devices nearby with their MAC addresses. Depending on your country, it may be illegal to monitor networks for MAC addresses, especially on networks that you do not own. Please check your country's laws (for US Section 18 U.S. Code § 2511) - "),t("a",{attrs:{href:"https://github.com/schollz/howmanypeoplearearound/issues/4",target:"_blank",rel:"noopener noreferrer"}},[e._v("discussion here"),t("OutboundLink")],1),e._v(".")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{397:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-sensors-ble.0fac0ddf.png"},398:function(e,t,a){e.exports=a.p+"assets/img/Theengs-Bridge-ble-gateway.659243b3.png"},399:function(e,t,a){e.exports=a.p+"assets/img/Theengs-Plug-OpenMQTTGateway.b78a5091.png"},400:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-mqtt-explorer-lywsd03mmc-atc.373ae7bf.png"},401:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-home-assistant-chart.d38cbd0f.png"},402:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-BLE-tracker-Home-Assistant.158960f9.png"},403:function(e,t,a){e.exports=a.p+"assets/img/KBeacon-app-configuration-moving.ddd3b980.jpg"},404:function(e,t,a){e.exports=a.p+"assets/img/KBeacon-app-configuration-moving2.5530d66f.jpg"},459:function(e,t,a){"use strict";a.r(t);var s=a(14),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"bluetooth-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bluetooth-gateway"}},[e._v("#")]),e._v(" Bluetooth gateway")]),e._v(" "),t("p",[e._v("The manufacturer agnostic Bluetooth Low Energy (BLE) gateway acts as a powerful BLE scanner and decoder of "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/devices/ble-devices/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bluetooth devices"),t("OutboundLink")],1),e._v(", allowing you to visualize and analyze information from a wide range of sensors.\nIt can also act as a device tracker and presence detection gateway by receiving nearby BLE devices and trackers.")]),e._v(" "),t("p",[e._v("Data are transmitted to an MQTT broker, where it can be used to trigger events and rules, as well as displayed, stored and processed in your favorite controller (Home Assistant, OpenHAB, Jeedom, Domoticz, ioBroker or any MQTT compatible software).")]),e._v(" "),t("p",[e._v("With the ability to monitor and analyze data such as temperature, humidity, moisture, luminance, weight, pressure, fine particles, and more, the BLE gateway provides a flexible and customizable solution for integrating BLE technology into your control and monitoring systems.")]),e._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("img",{staticStyle:{"max-width":"100%",height:"auto"},attrs:{src:a(397),alt:"BLE sensors and devices"}})]),e._v(" "),t("h2",{attrs:{id:"products-powered-by-openmqttgateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#products-powered-by-openmqttgateway"}},[e._v("#")]),e._v(" Products powered by OpenMQTTGateway")]),e._v(" "),t("h3",{attrs:{id:"theengs-bridge-ble-gateway-with-external-antenna"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#theengs-bridge-ble-gateway-with-external-antenna"}},[e._v("#")]),e._v(" Theengs Bridge, BLE gateway with external antenna")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antenna",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs bridge"),t("OutboundLink")],1),e._v(" is a powerfull BLE to MQTT gateway for over "),t("a",{attrs:{href:"https://decoder.theengs.io/devices/devices.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("100 sensors"),t("OutboundLink")],1),e._v(". Equipped with an Ethernet port, and external antenna, ensuring an enhanced range for your BLE sensors. It supports also WiFi connectivity.")]),e._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antenna",target:"_blank",rel:"noopener noreferrer"}},[t("img",{staticStyle:{"max-width":"100%",height:"auto"},attrs:{src:a(398),alt:"Theengs bridge view"}})])]),e._v(" "),t("h3",{attrs:{id:"theengs-plug-ble-gateway-and-smart-plug"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#theengs-plug-ble-gateway-and-smart-plug"}},[e._v("#")]),e._v(" Theengs Plug, BLE gateway and Smart Plug")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumption",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs plug"),t("OutboundLink")],1),e._v(" brings the following features:")]),e._v(" "),t("ul",[t("li",[e._v("BLE to MQTT gateway, tens of "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/devices/ble-devices/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bluetooth devices"),t("OutboundLink")],1),e._v(" supported thanks to Theengs Decoder library. The plug uses an ESP32 acting as a BLE to Wifi gateway to scan, decode and forward the data of the nearby sensors,")]),e._v(" "),t("li",[e._v("Smart plug that can be controlled remotely,")]),e._v(" "),t("li",[e._v("Energy consumption monitoring,")]),e._v(" "),t("li",[e._v("Device tracker,")]),e._v(" "),t("li",[e._v("Presence detection (beta),")]),e._v(" "),t("li",[e._v("Local connectivity first.")])]),e._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumption",target:"_blank",rel:"noopener noreferrer"}},[t("img",{staticStyle:{"max-width":"100%",height:"auto"},attrs:{src:a(399),alt:"Theengs plug view"}})])]),e._v(" "),t("p",[e._v("Support the project by purchasing the "),t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antenna",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs bridge"),t("OutboundLink")],1),e._v(" or the "),t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumption",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs plug"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"disable-or-enable-the-ble-gateway-default-true-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disable-or-enable-the-ble-gateway-default-true-available-with-ha-discovery"}},[e._v("#")]),e._v(" Disable or enable the BLE gateway (default: true, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to deactivate the BLE gateway:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"enabled\":false}'")])]),e._v(" "),t("p",[e._v("If you want to activate the BLE gateway:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"enabled\":true}'")])]),e._v(" "),t("h2",{attrs:{id:"receiving-signals-from-compatible-ble-sensors-to-publish-it-to-an-mqtt-broker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-signals-from-compatible-ble-sensors-to-publish-it-to-an-mqtt-broker"}},[e._v("#")]),e._v(" Receiving signals from "),t("a",{attrs:{href:"https://decoder.theengs.io/devices/devices_by_brand.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("compatible BLE sensors"),t("OutboundLink")],1),e._v(" to publish it to an MQTT broker.")]),e._v(" "),t("p",[e._v("To receive data from BLE sensors you can use an ESP32-based device with a programming USB port or use a Serial adapter.")]),e._v(" "),t("p",[e._v("OpenMQTTGateway is also available preloaded and configured with the "),t("a",{attrs:{href:"https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumption",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs plug"),t("OutboundLink")],1),e._v(", a smart plug that acts as a BLE gateway and energy monitoring device.")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Follow the "),t("RouterLink",{attrs:{to:"/upload/web-install.html"}},[e._v("Upload")]),e._v(" and "),t("RouterLink",{attrs:{to:"/upload/portal.html"}},[e._v("Configuration")]),e._v(" steps.")],1)]),e._v(" "),t("li",[t("p",[e._v("Download an MQTT client like MQTT explorer.")])]),e._v(" "),t("li",[t("p",[e._v("You should see data coming in your broker.")])])]),e._v(" "),t("p",[t("img",{attrs:{src:a(400),alt:"LYWSD03MMC MQTT data view"}})]),e._v(" "),t("p",[e._v("Once the data has been transmitted to the MQTT broker, it can be easily integrated with your preferred controller. For example, the data can be automatically discovered and made available within popular controllers, example below with Home Assistant.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(401),alt:"Home Assistant chart"}})]),e._v(" "),t("p",[e._v("Examples of compatible sensors among [our list](https://decoder.theengs.io/devices/devices_by_brand.html: Mi Flora, Mi jia, LYWDS02, LYWSD03MMC, ClearGrass, Mi scale, iBBQ, TPMS")]),e._v(" "),t("h2",{attrs:{id:"receiving-signals-from-ble-devices-for-device-tracker-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-signals-from-ble-devices-for-device-tracker-detection"}},[e._v("#")]),e._v(" Receiving signals from BLE devices for Device Tracker detection")]),e._v(" "),t("p",[e._v("The gateway will detect BLE trackers from Tile, Nut, TagIt, iTAG, Gigaset G-Tag, TicWatch GTH (Pro), Teltonika FMT100 vehicle tracker and Bosch Nyon eBike computers, as well as other devices with additional properties decoding like Mi Band, Amazfit, RuuviTag and others indicated as Device Trackers in the "),t("a",{attrs:{href:"https://decoder.theengs.io/devices/devices.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("compatible BLE devices list"),t("OutboundLink")],1),e._v(", and automatically create a device tracker entity following the Home Assistant discovery convention (if auto discovery is activated).")]),e._v(" "),t("p",[e._v("The devicen tracker entity created can be attached to a person to leverage presence detection. The "),t("code",[e._v("away")]),e._v(" or "),t("code",[e._v("not home")]),e._v(" state is triggered if the BLE tracker is not detected during the timer defined by "),t("code",[e._v("presenceawaytimer")]),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:a(402),alt:"Away home Home assistant view"}})]),e._v(" "),t("p",[e._v("By default "),t("code",[e._v("presenceawaytimer")]),e._v(" is set to 120s, you can change it from the slider in your controller or with the following command (ms)")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"presenceawaytimer\":66000}'")])]),e._v(" "),t("p",[e._v("Generally BLE devices will not broadcast if they are paired so you may need to ensure your beacons is unpaired/disconnected before it will be seen by the gateway.")]),e._v(" "),t("p",[e._v("Note that you can find apps to simulate beacons and do some tests like "),t("a",{attrs:{href:"https://play.google.com/store/apps/details?id=net.alea.beaconsimulator",target:"_blank",rel:"noopener noreferrer"}},[e._v("Beacon simulator"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("Apple iOS version >=10 devices advertise without an extra MAC address app, nevertheless this address "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/issues/71",target:"_blank",rel:"noopener noreferrer"}},[e._v("changes randomly"),t("OutboundLink")],1),e._v(" and can currently only be used with "),t("a",{attrs:{href:"https://gateway.theengs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs Gateway"),t("OutboundLink")],1),e._v(" and its "),t("a",{attrs:{href:"https://gateway.theengs.io/use/use.html#getting-identity-resolving-key-irk-for-apple-watch-iphone-and-ipad",target:"_blank",rel:"noopener noreferrer"}},[e._v("Identity MAC Address and Identity Resolving Key"),t("OutboundLink")],1),e._v(" feature.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("INFO")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("presenceawaytimer")]),e._v(" is also used to reset the state of the PIR/motion sensors to "),t("code",[e._v("off")]),e._v(" when using HA MQTT discovery convention. If the Sensor does not detect a motion, its state will be automatically set to "),t("code",[e._v("off")]),e._v(" after the "),t("code",[e._v("presenceawaytimer")]),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"receiving-signals-from-ble-devices-for-presence-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-signals-from-ble-devices-for-presence-detection"}},[e._v("#")]),e._v(" Receiving signals from BLE devices for Presence detection")]),e._v(" "),t("p",[e._v('To do this activate the "BT: Publish HASS presence" switch in your controller or send the following MQTT command to your broker: mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"hasspresence":true}\'')]),e._v(" "),t("h2",{attrs:{id:"receiving-signals-from-ble-devices-with-accelerometers-for-movement-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-signals-from-ble-devices-with-accelerometers-for-movement-detection"}},[e._v("#")]),e._v(" Receiving signals from BLE devices with accelerometers for movement detection")]),e._v(" "),t("p",[e._v("The gateway is designed to detect BLE trackers from BlueCharm and automatically create a binary sensor entity in accordance with the Home Assistant discovery convention, provided that auto discovery is enabled.")]),e._v(" "),t("p",[e._v("The binary sensor entity's state will be set to on or off based on whether the BLE beacon's x-axis acceleration value is detected during the time period defined by the movingtimer parameter.")]),e._v(" "),t("p",[e._v("By default, the movingtimer parameter is set to 60 seconds (60,000 ms). To modify this value, use the following command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"movingtimer\":66000}'")])]),e._v(" "),t("p",[e._v("To ensure proper functionality, configure the beacon using the KBeacon or KBeaconPro app (depending on your specific sensor) with the following settings:")]),e._v(" "),t("ul",[t("li",[e._v('In the General tab, set the Trigger Command to "motion".')]),e._v(" "),t("li",[e._v('In the Slot tab, enable advertisement with the Beacon Type set to "KSensor", the Trigger Only Advertisement option set to "YES", and the Sensor Axis set to "ON".')])]),e._v(" "),t("p",[t("img",{attrs:{src:a(403),alt:"KBeacon trigger settings"}})]),e._v(" "),t("p",[t("img",{attrs:{src:a(404),alt:"KBeacon details"}})]),e._v(" "),t("h2",{attrs:{id:"setting-a-white-or-black-list"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-a-white-or-black-list"}},[e._v("#")]),e._v(" Setting a white or black list")]),e._v(" "),t("p",[e._v("A black list is a list of MAC addresses that will never be published by OMG\nto set black list\n"),t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"black-list":["01:23:14:55:16:15","4C:65:77:88:9C:79","4C:65:A6:66:3C:79"]}\'')])]),e._v(" "),t("p",[e._v("A white list is a list of MAC addresses permitted to be published by OMG\nto set white list\n"),t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"white-list":["01:23:14:55:16:15","4C:65:77:88:9C:79","4C:65:A6:66:3C:79"]}\'')])]),e._v(" "),t("p",[e._v("to temporarily disable white/black list\n"),t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"ignoreWBlist\":true}'")])]),e._v(" "),t("p",[e._v("to enable white/black list back\n"),t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"ignoreWBlist\":false}'")])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("So as to keep your white/black list persistent you can publish it with the retain option of MQTT (-r with mosquitto_pub or retain check box of MQTT Explorer)\n"),t("code",[e._v('mosquitto_pub -r -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"white-list":["01:23:14:55:16:15","4C:65:77:88:9C:79","4C:65:A6:66:3C:79"]}\'')])]),e._v(" "),t("p",[t("strong",[e._v("NOTE")]),e._v(": Only when sending a white/black list should the retain option be set. All other commands to any OpenMQTTGateway gateway "),t("strong",[e._v("must not")]),e._v(" have the retain option set. To persist such other command settings, read "),t("a",{attrs:{href:"https://docs.openmqttgateway.com/use/ble.html#store-ble-configuration-into-the-gateway",target:"_blank",rel:"noopener noreferrer"}},[e._v("the following section"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"setting-the-time-between-ble-scans-and-force-a-scan-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-time-between-ble-scans-and-force-a-scan-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting the time between BLE scans and force a scan (available with HA discovery)")]),e._v(" "),t("p",[e._v("Example if you want the BLE to scan every 66 seconds:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"interval\":66000}'")])]),e._v(" "),t("p",[e._v("you can also force a scan to be done by the following command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"interval\":0}'")])]),e._v(" "),t("p",[e._v("Changing the interval between scans will deactivate adaptive scanning.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("With Home Assistant, this command is directly available through MQTT auto discovery as a switch into the HASS OpenMQTTGateway device entities list.")])]),e._v(" "),t("p",[e._v("Once the forced scan has completed, the previous scan interval value will be restored. Forcing a scan command trigger also a BLE connect process after the scan (see below).")]),e._v(" "),t("p",[e._v("The default value "),t("code",[e._v("TimeBtwRead")]),e._v(" is set into config_BT.h or into your .ini file for platformio users.")]),e._v(" "),t("p",[e._v("If you want to scan continuously for BLE devices, for example for beacon location you can set the interval to 100ms:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"interval\":100}'")])]),e._v(" "),t("p",[e._v("In this case you should deactivate the BLE connection mechanism to avoid concurrency between scan and connections (see chapter below, bleconnect).")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("For certain devices like LYWSD03MMC OpenMQTTGateway use a connection (due to the fact that the advertized data are encrypted), this connection mechanism is launched after every "),t("code",[e._v("TimeBtwConnect")]),e._v(" per default, you can modify it by following the procedure below.")])]),e._v(" "),t("h2",{attrs:{id:"setting-the-time-between-connection-attempts-default-60min-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-time-between-connection-attempts-default-60min-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting the time between connection attempts (default: 60min, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to change the time between BLE connect you can change it by MQTT, if you want the BLE connect time to be every 300s:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"intervalcnct\":300000}'")])]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-publishes-all-the-ble-devices-scanned-or-only-the-detected-sensors-default-false-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-publishes-all-the-ble-devices-scanned-or-only-the-detected-sensors-default-false-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting if the gateway publishes all the BLE devices scanned or only the detected sensors (default: false, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to change this characteristic:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"onlysensors\":true}'")])]),e._v(" "),t("p",[e._v("The gateway will publish only detected sensors and trackers like Mi Flora, Mi jia, Mi Band, LYWSD03MMC... or trackers like Tile, Nut, TagIt or iTag, and not any other other BLE devices. This is useful if you don't use the gateway for presence detection with unrecognised trackers.")]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-publishes-known-devices-which-randomly-change-their-mac-address-default-false"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-publishes-known-devices-which-randomly-change-their-mac-address-default-false"}},[e._v("#")]),e._v(" Setting if the gateway publishes known devices which randomly change their MAC address (default: false)")]),e._v(" "),t("p",[e._v("The default is false, as such changing MAC addresses cannot be related to specific devices.")]),e._v(" "),t("p",[e._v("If you want to change this characteristic:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"randommacs\":true}'")])]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-use-adaptive-scanning-default-true-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-use-adaptive-scanning-default-true-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting if the gateway use adaptive scanning (default: true, available with HA discovery)")]),e._v(" "),t("p",[e._v("Adaptive scanning lets the gateway decide for you the best passive "),t("code",[e._v("interval")]),e._v(" and active "),t("code",[e._v("intervalacts")]),e._v(" scan interval, depending on the characteristics of your devices.\nThe gateway retrieves your devices' information from "),t("a",{attrs:{href:"https://decoder.theengs.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs Decoder"),t("OutboundLink")],1),e._v(" and adapts its parameters accordingly if a device that requires it is detected.\nFor example a door or a PIR sensor will require continuous scanning, so if detected the gateway is going to reduce its time between scans to the minimum. Or your devices may also require active scanning to retrieve data, in this case the gateway will also trigger active scans at regular intervals.")]),e._v(" "),t("p",[e._v("If you want to change this characteristic (default:true):")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"adaptivescan\":false}'")])]),e._v(" "),t("p",[e._v("Setting Adaptive scanning to "),t("code",[e._v("false")]),e._v(" will automatically put the gateway to continuous active scanning if no additional manual changes have already been applied.")]),e._v(" "),t("p",[e._v("An overview with background information to better understand the different setting used:")]),e._v(" "),t("p",[t("strong",[e._v("Passive scanning:")]),e._v(" With this scanning mode the gateway picks up any freely available broadcasts sent out by devices, without any interaction with the devices. The interval for this is set with "),t("a",{attrs:{href:"#setting-the-time-between-ble-scans-and-force-a-scan"}},[e._v('{"interval":66000}')])]),e._v(" "),t("p",[t("strong",[e._v("Active scanning:")]),e._v(" With this scanning mode the gateway sends out requests for sensor broadcasts first, before then picking up the broadcast advertisement data. Some devices require this request before they send out all data in their broadcasts. The interval for this active scanning with request first is set by "),t("a",{attrs:{href:"#setting-the-time-between-active-scanning"}},[e._v('{"intervalacts":300000}')])]),e._v(" "),t("p",[e._v("Setting "),t("a",{attrs:{href:"#advanced-publishing-advertisement-and-advanced-data-default-false"}},[e._v("Publishing advertisement and advanced data")]),e._v(" to true will show you additional data about which of your devices require active scanning and/or continuous scanning, so that you can tune these setting to your devices and your individual requirements of their data.")]),e._v(" "),t("p",[t("strong",[e._v('"cont":true')]),e._v(' - the device requires continuous scanning. If passive ({"interval":100}) or active ({"intervalacts":100}) depends on the additional device specification.')]),e._v(" "),t("p",[t("strong",[e._v('"acts":true')]),e._v(" - the device requires active scanning to broadcast all of it's data for decoding.")]),e._v(" "),t("h2",{attrs:{id:"setting-the-time-between-active-scanning-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-time-between-active-scanning-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting the time between active scanning (available with HA discovery)")]),e._v(" "),t("p",[e._v("If you have passive scanning activated, but also have some devices which require active scanning, this defines the time interval between two intermittent active scans.")]),e._v(" "),t("p",[e._v("Example for setting the active scan interval time to every 5 minutes:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"intervalacts\":300000}'")])]),e._v(" "),t("p",[e._v("Changing the active scan interval will deactivate adaptive scanning.")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("The active scan interval "),t("code",[e._v("intervalacts")]),e._v(" can only bet set equal to or higher than the passive scan interval "),t("code",[e._v("interval")]),e._v(", as any lower value would not make any sense.")])]),e._v(" "),t("h2",{attrs:{id:"setting-the-duration-of-a-scan-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-duration-of-a-scan-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting the duration of a scan (available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to change the default duration of each scan cycle to 5 seconds")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"scanduration\":5000}'")])]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-connects-to-ble-devices-eligibles-default-true-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-connects-to-ble-devices-eligibles-default-true-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting if the gateway connects to BLE devices eligibles (default: true, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to change this characteristic:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"bleconnect\":false}'")])]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-publish-into-home-assistant-home-presence-topic-default-false-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-publish-into-home-assistant-home-presence-topic-default-false-available-with-ha-discovery"}},[e._v("#")]),e._v(" Setting if the gateway publish into Home Assistant Home presence topic (default: false, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to publish to Home Assistant presence topic, you can activate this function by the HASS interface (this command is auto discovered), "),t("RouterLink",{attrs:{to:"/integrate/home_assistant.html#mqtt-room-presence"}},[e._v("here is a yaml example")]),e._v(".\nOr by an MQTT command.")],1),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"hasspresence\":true}'")])]),e._v(" "),t("p",[e._v("To change presence publication topic, use this MQTT command:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"prestopic":"presence/"}\'')])]),e._v(" "),t("p",[e._v("To use iBeacon UUID for presence, instead of sender (random) MAC address, use this MQTT command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"presuseuuid\":true}'")])]),e._v(" "),t("p",[e._v("This will change usual payload for iBeacon from:\n"),t("code",[e._v('{"id":"60:87:57:4C:9B:C2","mac_type":1,"rssi":-78,"distance":7.85288,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}')]),e._v("\nTo:\n"),t("code",[e._v('{"id":"1de4b189115e45f6b44e509352269977","mac_type":1,"rssi":-78,"distance":7.85288,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66,"mac":"60:87:57:4C:9B:C2"}')]),e._v('\nNote: the MAC address is put in "mac" field.')]),e._v(" "),t("h2",{attrs:{id:"setting-if-the-gateway-uses-ibeacon-uuid-as-topic-instead-of-random-mac-address-default-false"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-if-the-gateway-uses-ibeacon-uuid-as-topic-instead-of-random-mac-address-default-false"}},[e._v("#")]),e._v(" Setting if the gateway uses iBeacon UUID as topic, instead of (random) MAC address (default: false)")]),e._v(" "),t("p",[e._v("By default, iBeacon are published like other devices, using a topic based on the MAC address of the sender.\nBut modern phones randomize their Bluetooth MAC address making it difficult to track iBeacon.")]),e._v(" "),t("p",[e._v("For example, the 2 following messages corresponds to the same iBeacon, but with different MAC and topics:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/BTtoMQTT/58782076BC24 {"id":"58:78:20:76:BC:24","mac_type":1,"rssi":-79,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}\nhome/OpenMQTTGateway/BTtoMQTT/5210A84690AC {"id":"52:10:A8:46:90:AC","mac_type":1,"rssi":-77,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br")])]),t("p",[e._v("To use iBeacon UUID as topic, use this MQTT command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"pubuuid4topic\":true}'")])]),e._v(" "),t("p",[e._v("Resulting in such messages (for the same iBeacon as previously):")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/BTtoMQTT/1de4b189115e45f6b44e509352269977 {"id":"52:10:A8:46:90:AC","mac_type":1,"rssi":-76,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}\nhome/OpenMQTTGateway/BTtoMQTT/1de4b189115e45f6b44e509352269977 {"id":"7B:63:C6:82:DC:57","mac_type":1,"rssi":-83,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br")])]),t("h2",{attrs:{id:"setting-the-minimum-rssi-accepted-to-publish-device-data-default-100"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-minimum-rssi-accepted-to-publish-device-data-default-100"}},[e._v("#")]),e._v(" Setting the minimum RSSI accepted to publish device data (default:-100)")]),e._v(" "),t("p",[e._v("If you want to change the minimum RSSI value accepted for a device to be published, you can change it by MQTT. For example if you want to set -80")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"minrssi\":-80}'")])]),e._v(" "),t("p",[e._v("you can also accept all the devices by the following command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"minrssi\":-200}'")])]),e._v(" "),t("p",[e._v("The default value is set into config_BT.h")]),e._v(" "),t("h2",{attrs:{id:"store-ble-configuration-into-the-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#store-ble-configuration-into-the-gateway"}},[e._v("#")]),e._v(" Store BLE configuration into the gateway")]),e._v(" "),t("p",[e._v("OpenMQTTGateway has the capability to save the current configuration and reload it at startup.")]),e._v(" "),t("p",[e._v("To store the running configuration into the gateway, use the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"save\":true}'")])]),e._v(" "),t("p",[e._v("At any time, you can reload the stored configuration with the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"load\":true}'")])]),e._v(" "),t("p",[e._v("If you want to erase the stored configuration, use the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"erase\":true}'")]),e._v("\nNote that it will not change the running configuration, only ensure default configuration is used at next startup.")]),e._v(" "),t("p",[e._v("By the way, if you want to load the default built-in configuration (on any board, not only ESP32), use the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"init\":true}'")]),e._v("\nNote that it will not change the stored configuration, "),t("code",[e._v("erase")]),e._v(" or "),t("code",[e._v("save")]),e._v(" is still needed to overwrite the saved configuration.")]),e._v(" "),t("h2",{attrs:{id:"controlling-devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#controlling-devices"}},[e._v("#")]),e._v(" Controlling devices")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("To control devices reliably, set the interval between scans to at least 5 seconds and the scan duration to 1 second to ensure commands are successfully transmitted to your devices.")])]),e._v(" "),t("h2",{attrs:{id:"read-write-ble-characteristics-over-mqtt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#read-write-ble-characteristics-over-mqtt"}},[e._v("#")]),e._v(" Read/write BLE characteristics over MQTT")]),e._v(" "),t("p",[e._v("The gateway can read and write BLE characteristics from devices and provide the results in an MQTT message.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("These actions will be taken on the next BLE connection, which occurs after scanning and after the scan count is reached, "),t("a",{attrs:{href:"#setting-the-number-of-scans-between-connection-attempts"}},[e._v("see above to set this")]),e._v(".\nThis can be overridden by providing an (optional) parameter "),t("code",[e._v('"immediate": true')]),e._v(" within the command. This will cause the BLE scan to stop if currently in progress, allowing the command to be immediately processed. All other connection commands in queue will also be processed for the same device, commands for other devices will be deferred until the next normally scheduled connection.")]),e._v(" "),t("p",[t("strong",[e._v("Note")]),e._v(' Some devices need to have the MAC address type specified. You can find this type by checking the log/MQTT data and looking for "mac_type". The mac_type of your device can be seen by setting '),t("code",[e._v("pubadvdata")]),e._v(" to "),t("code",[e._v("true")]),e._v(" with an MQTT command (see Publishing advertisement data), or with the macro "),t("code",[e._v("pubBLEAdvData true")]),e._v(". By default the type is 0 but some devices use different type values. You must specify the correct type to connect successfully."),t("br"),e._v("\nTo specify the MAC address type add the parameter "),t("code",[e._v('"mac_type"')]),e._v(" to the command. For example "),t("code",[e._v('"mac_type": 1')]),e._v(" to connect with a device with the MAC address type of 1.")])]),e._v(" "),t("h3",{attrs:{id:"example-write-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-write-command"}},[e._v("#")]),e._v(" Example write command")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "ble_write_address":"AA:BB:CC:DD:EE:FF",\n "ble_write_service":"cba20d00-224d-11e6-9fb8-0002a5d5c51b",\n "ble_write_char":"cba20002-224d-11e6-9fb8-0002a5d5c51b",\n "ble_write_value":"TEST",\n "value_type":"STRING",\n "ttl":4,\n "immediate":true }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br")])]),t("p",[e._v("Response:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id":"AA:BB:CC:DD:EE:FF",\n "service":"cba20d00-224d-11e6-9fb8-0002a5d5c51b",\n "characteristic":"cba20002-224d-11e6-9fb8-0002a5d5c51b",\n "write":"TEST",\n "success":true\n}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br")])]),t("h3",{attrs:{id:"example-read-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-read-command"}},[e._v("#")]),e._v(" Example read command")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "ble_read_address":"AA:BB:CC:DD:EE:FF",\n "ble_read_service":"cba20d00-224d-11e6-9fb8-0002a5d5c51b",\n "ble_read_char":"cba20002-224d-11e6-9fb8-0002a5d5c51b",\n "value_type":"STRING",\n "ttl": 2 }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br")])]),t("p",[e._v("Response:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id":"AA:BB:CC:DD:EE:FF",\n "service":"cba20d00-224d-11e6-9fb8-0002a5d5c51b",\n "characteristic":"cba20002-224d-11e6-9fb8-0002a5d5c51b",\n "read":"TEST",\n "success":true\n}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("ttl")]),e._v(" parameter is the number of attempts to connect (defaults to 1), which occur after the BLE scan completes."),t("br"),e._v(" "),t("code",[e._v("value_type")]),e._v(" can be one of: STRING, HEX, INT, FLOAT. Default is STRING if omitted in the message.")])]),e._v(" "),t("h2",{attrs:{id:"switchbot-bot-control-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#switchbot-bot-control-available-with-ha-discovery"}},[e._v("#")]),e._v(" SwitchBot Bot control (available with HA discovery)")]),e._v(" "),t("p",[e._v("SwitchBot Bot devices are automatically discovered and available as a device in the Home Assistant Settings menu. The following commands are supported:")]),e._v(" "),t("ul",[t("li",[e._v("Press")]),e._v(" "),t("li",[e._v("On")]),e._v(" "),t("li",[e._v("Off")]),e._v(" "),t("li",[e._v("Up")]),e._v(" "),t("li",[e._v("Down")])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If the SwitchBot mode is changed the ESP32 must be restarted.")])]),e._v(" "),t("p",[e._v("The device can also be controlled over MQTT with a simplified BLE write command.")]),e._v(" "),t("h3",{attrs:{id:"set-the-switchbot-bot-state-to-on"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-bot-state-to-on"}},[e._v("#")]),e._v(" Set the SwitchBot Bot state to ON:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"X1",\n "cmd":"on",\n "id":"AA:BB:CC:DD:EE:FF"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-bot-state-to-off"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-bot-state-to-off"}},[e._v("#")]),e._v(" Set the SwitchBot Bot state to OFF:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"X1",\n "cmd":"off",\n "id":"AA:BB:CC:DD:EE:FF"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-bot-to-press"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-bot-to-press"}},[e._v("#")]),e._v(" Set the SwitchBot Bot to PRESS:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"X1",\n "cmd":"press",\n "id":"AA:BB:CC:DD:EE:FF"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-bot-to-go-up"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-bot-to-go-up"}},[e._v("#")]),e._v(" Set the SwitchBot Bot to go UP:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"X1",\n "cmd":"up",\n "id":"AA:BB:CC:DD:EE:FF"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-bot-to-go-down"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-bot-to-go-down"}},[e._v("#")]),e._v(" Set the SwitchBot Bot to go DOWN:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"X1",\n "cmd":"down",\n "id":"AA:BB:CC:DD:EE:FF"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("Response (assuming success):")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id":"AA:BB:CC:DD:EE:FF",\n "state":"on"\n}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])]),t("h2",{attrs:{id:"switchbot-blind-tilt-control-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#switchbot-blind-tilt-control-available-with-ha-discovery"}},[e._v("#")]),e._v(" SwitchBot Blind Tilt control (available with HA discovery)")]),e._v(" "),t("p",[e._v("SwitchBot Blind Tilt devices are automatically discovered and available as a device in the settings Home Assistant Settings menu. The following commands are supported:")]),e._v(" "),t("ul",[t("li",[e._v("Open")]),e._v(" "),t("li",[e._v("Close down")]),e._v(" "),t("li",[e._v("Set a percentage")])]),e._v(" "),t("p",[e._v("The device can also be controlled over MQTT with a simplified BLE write command.")]),e._v(" "),t("h3",{attrs:{id:"set-the-switchbot-blind-tilt-state-to-open"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-blind-tilt-state-to-open"}},[e._v("#")]),e._v(" Set the SwitchBot Blind Tilt state to OPEN:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W270160X",\n "tilt":"open",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-blind-tilt-state-to-close-down"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-blind-tilt-state-to-close-down"}},[e._v("#")]),e._v(" Set the SwitchBot Blind Tilt state to CLOSE_DOWN:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W270160X",\n "tilt":"close_down",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-blind-tilt-state-to-close-up"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-blind-tilt-state-to-close-up"}},[e._v("#")]),e._v(" Set the SwitchBot Blind Tilt state to CLOSE_UP:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W270160X",\n "tilt":"close_up",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-blind-tilt-state-to-a-percentage-0-100"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-blind-tilt-state-to-a-percentage-0-100"}},[e._v("#")]),e._v(" Set the SwitchBot Blind Tilt state to a percentage (0-100):")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W270160X",\n "tilt":55,\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-blind-tilt-to-stop"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-blind-tilt-to-stop"}},[e._v("#")]),e._v(" Set the SwitchBot Blind Tilt to Stop:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W270160X",\n "tilt":"stop",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"response-assuming-success"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#response-assuming-success"}},[e._v("#")]),e._v(" Response (assuming success):")]),e._v(" "),t("p",[e._v("The Switchbot Blind Tilt response :")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id":"AA:BB:CC:DD:EE:FF",\n "tilt":55,\n "open":90,\n "direction":"up"\n}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br")])]),t("h2",{attrs:{id:"switchbot-curtain-2-3-control-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#switchbot-curtain-2-3-control-available-with-ha-discovery"}},[e._v("#")]),e._v(" SwitchBot Curtain (2/3) control (available with HA discovery)")]),e._v(" "),t("p",[e._v("SwitchBot Curtain (2/3) devices are automatically discovered and available as a device in the settings Home Assistant Settings menu. The following commands are supported:")]),e._v(" "),t("ul",[t("li",[e._v("Set a percentage")])]),e._v(" "),t("p",[e._v("The device can also be controlled over MQTT with a simplified BLE write command.")]),e._v(" "),t("h3",{attrs:{id:"set-the-switchbot-curtain-state-to-open"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-curtain-state-to-open"}},[e._v("#")]),e._v(" Set the SwitchBot Curtain state to OPEN:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W070160X",\n "position":"open",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-curtain-state-to-close"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-curtain-state-to-close"}},[e._v("#")]),e._v(" Set the SwitchBot Curtain state to CLOSE:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W070160X",\n "position":"close",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-curtain-to-a-percentage-0-100"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-curtain-to-a-percentage-0-100"}},[e._v("#")]),e._v(" Set the SwitchBot Curtain to a percentage (0-100):")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W070160X",\n "position":55,\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"set-the-switchbot-curtain-to-stop"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-the-switchbot-curtain-to-stop"}},[e._v("#")]),e._v(" Set the SwitchBot Curtain to Stop:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT -m \'{\n "model_id":"W070160X",\n "position":"stop",\n "id":"AA:BB:CC:DD:EE:FF"\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("h3",{attrs:{id:"response-assuming-success-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#response-assuming-success-2"}},[e._v("#")]),e._v(" Response (assuming success):")]),e._v(" "),t("p",[e._v("The Switchbot Curtain response :")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id":"AA:BB:CC:DD:EE:FF",\n "position":55,\n}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])]),t("h2",{attrs:{id:"advanced-setting-up-an-external-decoder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-setting-up-an-external-decoder"}},[e._v("#")]),e._v(" ADVANCED: Setting up an external decoder")]),e._v(" "),t("p",[e._v("This advanced option is used to publish raw radio frames on a specific topic to be decoded by an external decoder instead of the integrated one.")]),e._v(" "),t("p",[e._v("To enable external decoder:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"extDecoderEnable\":true}'")])]),e._v(" "),t("p",[e._v('To change the default external decoder topic to "undecoded":')]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m \'{"extDecoderTopic":"undecoded"}\'')])]),e._v(" "),t("h2",{attrs:{id:"advanced-filtering-out-connectable-devices-default-false"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-filtering-out-connectable-devices-default-false"}},[e._v("#")]),e._v(" ADVANCED: Filtering out connectable devices (default: false)")]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/integrate/openhab2.html"}},[e._v("With OpenHAB integration")]),e._v(", this configuration is highly recommended, otherwise you may encounter incomplete data.")],1),e._v(" "),t("p",[e._v("If you want to enable this feature:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"filterConnectable\":true}'")])]),e._v(" "),t("h2",{attrs:{id:"advanced-advertisement-and-advanced-data-default-false-available-with-ha-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-advertisement-and-advanced-data-default-false-available-with-ha-discovery"}},[e._v("#")]),e._v(" ADVANCED: Advertisement and advanced data (default: false, available with HA discovery)")]),e._v(" "),t("p",[e._v("If you want to enable this feature:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"pubadvdata\":true}'")])]),e._v(" "),t("p",[e._v("This will publish extensive information about the device:")]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"11:22:33:44:55:66"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"mac_type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"adv_type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Qingping Motion & Light"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"rssi"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("-93")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"servicedata"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"88121122334455660201520f0126090403000000"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"servicedatauuid"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0xfdcd"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"brand"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Qingping"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"model"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Motion & Light"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"model_id"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"CGPR1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"lux"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"batt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("82")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("To stop publishing advertisement data:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{\"pubadvdata\":false}'")])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.")])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("We strongly encourage the use of a white-list (see below) so as to collect data from your devices only and not from other MAC addresses.\nBy default the gateway scans the advertizing BLE devices nearby with their MAC addresses. Depending on your country, it may be illegal to monitor networks for MAC addresses, especially on networks that you do not own. Please check your country's laws (for US Section 18 U.S. Code § 2511) - "),t("a",{attrs:{href:"https://github.com/schollz/howmanypeoplearearound/issues/4",target:"_blank",rel:"noopener noreferrer"}},[e._v("discussion here"),t("OutboundLink")],1),e._v(".")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/27.8d8ada9a.js b/dev/assets/js/27.f4bc0108.js similarity index 99% rename from dev/assets/js/27.8d8ada9a.js rename to dev/assets/js/27.f4bc0108.js index 3dfd3f43..d69ccc57 100644 --- a/dev/assets/js/27.8d8ada9a.js +++ b/dev/assets/js/27.f4bc0108.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{388:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_ESP32_binary_flash.7efd1e03.png"},389:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_ESP32_binary_flash2.d1b14293.png"},390:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_NodeMCU_PyFlasher.050597e1.png"},450:function(e,o,t){"use strict";t.r(o);var a=t(14),s=Object(a.a)({},(function(){var e=this,o=e._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"option-2-upload-ready-to-go-binaries"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#option-2-upload-ready-to-go-binaries"}},[e._v("#")]),e._v(" (Option 2) Upload ready-to-go binaries")]),e._v(" "),o("p",[e._v("This section is useful if you want to directly flash your ESP from your desktop. Once flashed you can change wifi and broker settings.\nNevertheless you will not be able to change advanced parameters; if you want to do so, refer to "),o("RouterLink",{attrs:{to:"/upload/builds.html"}},[e._v("Upload your configurations")]),e._v(" section.")],1),e._v(" "),o("p",[e._v("Download the binary corresponding to your board and gateway "),o("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/releases",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),o("OutboundLink")],1),e._v(" from github and uncompress it.")]),e._v(" "),o("h2",{attrs:{id:"esp32"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#esp32"}},[e._v("#")]),e._v(" ESP32")]),e._v(" "),o("ul",[o("li",[e._v("Download the bootloader "),o("a",{attrs:{href:"https://github.com/espressif/arduino-esp32/raw/2.0.5/tools/sdk/esp32/bin/bootloader_dio_80m.bin",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),o("OutboundLink")],1)]),e._v(" "),o("li",[e._v("Download the boot_app0 from "),o("a",{attrs:{href:"https://github.com/espressif/arduino-esp32/raw/2.0.5/tools/partitions/boot_app0.bin",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),o("OutboundLink")],1)]),e._v(" "),o("li",[e._v("Download the flash tool utility from espressif:\nhttps://www.espressif.com/en/products/hardware/esp32/resources")]),e._v(" "),o("li",[e._v("Uncompress the package")]),e._v(" "),o("li",[e._v("Execute "),o("code",[e._v("flash_download_tools")])]),e._v(" "),o("li",[e._v("Choose Developer mode")]),e._v(" "),o("li",[e._v("Choose ESP32 DownloadTool")]),e._v(" "),o("li",[e._v("Set the files and the address as below:\n"),o("img",{attrs:{src:t(388),alt:"Flash download tool"}})]),e._v(" "),o("li",[e._v("Set the config as above")]),e._v(" "),o("li",[e._v("Connect your ESP32 board and select the COM port")]),e._v(" "),o("li",[e._v("Click on erase if it is your first upload")]),e._v(" "),o("li",[e._v("If you see SYNC (above the START button) for more than 5 seconds, press the boot button of your ESP32")]),e._v(" "),o("li",[e._v("Once done you can click on START button")]),e._v(" "),o("li",[e._v("If you see SYNC (above the START button) for more than 5 seconds, press the boot button of your ESP32\nThe upload details appears in the rear shell windows, you can see also the progress bar changing.")]),e._v(" "),o("li",[e._v('Once done the flash tool display "FINISH" like below\n'),o("img",{attrs:{src:t(389),alt:"Flash download tool 2"}})])]),e._v(" "),o("h3",{attrs:{id:"linux-esptool-py"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#linux-esptool-py"}},[e._v("#")]),e._v(" Linux - esptool.py")]),e._v(" "),o("p",[e._v("If you want to upload the ready-to-go binary from Linux (or any other OS where you have Python) you can use the "),o("a",{attrs:{href:"https://github.com/espressif/esptool",target:"_blank",rel:"noopener noreferrer"}},[e._v("esptool.py"),o("OutboundLink")],1),e._v(". This an official Python based flashing tool from Espressif for ESP82XX and ESP32.")]),e._v(" "),o("ul",[o("li",[o("p",[e._v("Install esptool from PyPI via pip: "),o("code",[e._v("pip install esptool")]),e._v(" (or using the python package manager of your choice)")])]),e._v(" "),o("li",[o("p",[e._v("Now you should be able to run "),o("code",[e._v("esptool.py -h")]),e._v(" to see a summary of all available commands, command line options and verify the installation")])]),e._v(" "),o("li",[o("p",[e._v("Download the bootloader, boot_app0 and the binary for your board from the respective links "),o("a",{attrs:{href:"#esp32"}},[e._v("above")])])]),e._v(" "),o("li",[o("p",[e._v("Use the below command to upload the binary files to the board (change file names and serial port as needed, for Windows use port number e.g.: "),o("code",[e._v("COM4")]),e._v("):")]),e._v(" "),o("div",{staticClass:"language- extra-class"},[o("pre",[o("code",[e._v("esptool.py --port /dev/ttyUSB0 --chip esp32 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dout --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader_dio_80m.bin 0x8000 esp32dev-ble-cont-partitions.bin 0x10000 esp32dev-ble-cont-firmware.bin\n")])])])]),e._v(" "),o("li",[o("p",[e._v("Output for a successful upload should look like this:")]),e._v(" "),o("div",{staticClass:"language- extra-class"},[o("pre",[o("code",[e._v("esptool.py v2.8\nSerial port /dev/ttyUSB0\nConnecting.....\nChip is ESP32D0WDQ6 (revision 1)\nFeatures: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None\nCrystal is 40MHz\nMAC: 30:ae:a4:ff:48:14\nUploading stub...\nRunning stub...\nStub running...\nChanging baud rate to 921600\nChanged.\nConfiguring flash size...\nAuto-detected Flash size: 4MB\nCompressed 8192 bytes to 47...\nWrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 15741.5 kbit/s)...\nHash of data verified.\nFlash params set to 0x0320\nCompressed 17312 bytes to 11972...\nWrote 17312 bytes (11972 compressed) at 0x00001000 in 0.2 seconds (effective 903.1 kbit/s)...\nHash of data verified.\nCompressed 3072 bytes to 129...\nWrote 3072 bytes (129 compressed) at 0x00008000 in 0.0 seconds (effective 5168.4 kbit/s)...\nHash of data verified.\nCompressed 1444624 bytes to 838880...\nWrote 1444624 bytes (838880 compressed) at 0x00010000 in 13.1 seconds (effective 881.2 kbit/s)...\nHash of data verified.\n\nLeaving...\nHard resetting via RTS pin...\n")])])])]),e._v(" "),o("li",[o("p",[e._v("The board resets after the upload and boots the gateway firmware")])])]),e._v(" "),o("h3",{attrs:{id:"mac-esptool-py"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#mac-esptool-py"}},[e._v("#")]),e._v(" Mac - esptool.py")]),e._v(" "),o("p",[e._v("The approach for Mac is similiar to Linux. You need to install "),o("a",{attrs:{href:"https://brew.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("Brew"),o("OutboundLink")],1),e._v(" for Mac to use "),o("a",{attrs:{href:"https://docs.brew.sh/Homebrew-and-Python",target:"_blank",rel:"noopener noreferrer"}},[e._v("pip"),o("OutboundLink")],1),e._v(".\nThe esptool.py tool needs to be adressed explicitly with .py at the end.\nIf you do fail with the command, run "),o("code",[e._v("esptool.py chip_id")]),e._v(" to let your Mac check for the ESP32 on your serial ports. A common failure for this looks like this:")]),e._v(" "),o("div",{staticClass:"language- extra-class"},[o("pre",[o("code",[e._v(" A fatal error occurred: Unable to verify flash chip connection (Invalid head of packet (0xE0): Possible serial noise or corruption.).\n")])])]),o("p",[e._v("If you receive this error")]),e._v(" "),o("div",{staticClass:"language- extra-class"},[o("pre",[o("code",[e._v(" A fatal error occurred: Unable to verify flash chip connection (Packet content transfer stopped (received 7 bytes)).\n")])])]),o("p",[e._v("while flashing, try to reduce the baud rate to "),o("code",[e._v("--baud 115200")]),e._v(", as this seems to help in most cases.")]),e._v(" "),o("h2",{attrs:{id:"esp8266"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#esp8266"}},[e._v("#")]),e._v(" ESP8266")]),e._v(" "),o("ul",[o("li",[e._v("Download the NodeMCU Py Flasher tool :\nhttps://github.com/marcelstoer/nodemcu-pyflasher/releases")]),e._v(" "),o("li",[e._v("Execute "),o("code",[e._v("NodeMCU-PyFlasher")])]),e._v(" "),o("li",[e._v("Set the files and parameters as below:\n"),o("img",{attrs:{src:t(390),alt:"NodeMCU Py Flasher"}})]),e._v(" "),o("li",[e._v("Connect your board and select the COM port")]),e._v(" "),o("li",[e._v("Click on "),o("em",[e._v("FlashNodeMCU")]),e._v("\nThe upload details appears.")])]),e._v(" "),o("p",[e._v("With an ESP if you did not set your network and MQTT parameters manually you can now open the "),o("RouterLink",{attrs:{to:"/upload/portal.html"}},[e._v("web portal configuration")]),e._v(".")],1),e._v(" "),o("p",[e._v("Note that to reset the wifi and MQTT settings you can check "),o("em",[e._v("yes, wipes all data")])]),e._v(" "),o("p",[o("a",{attrs:{href:"https://hits.seeyoufarm.com",target:"_blank",rel:"noopener noreferrer"}},[o("img",{attrs:{src:"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fdocs.openmqttgateway.com%2Fupload%2Fbinaries.html&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false",alt:"Hits"}}),o("OutboundLink")],1)])])}),[],!1,null,null,null);o.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{388:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_ESP32_binary_flash.7efd1e03.png"},389:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_ESP32_binary_flash2.d1b14293.png"},390:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_NodeMCU_PyFlasher.050597e1.png"},451:function(e,o,t){"use strict";t.r(o);var a=t(14),s=Object(a.a)({},(function(){var e=this,o=e._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"option-2-upload-ready-to-go-binaries"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#option-2-upload-ready-to-go-binaries"}},[e._v("#")]),e._v(" (Option 2) Upload ready-to-go binaries")]),e._v(" "),o("p",[e._v("This section is useful if you want to directly flash your ESP from your desktop. Once flashed you can change wifi and broker settings.\nNevertheless you will not be able to change advanced parameters; if you want to do so, refer to "),o("RouterLink",{attrs:{to:"/upload/builds.html"}},[e._v("Upload your configurations")]),e._v(" section.")],1),e._v(" "),o("p",[e._v("Download the binary corresponding to your board and gateway "),o("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/releases",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),o("OutboundLink")],1),e._v(" from github and uncompress it.")]),e._v(" "),o("h2",{attrs:{id:"esp32"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#esp32"}},[e._v("#")]),e._v(" ESP32")]),e._v(" "),o("ul",[o("li",[e._v("Download the bootloader "),o("a",{attrs:{href:"https://github.com/espressif/arduino-esp32/raw/2.0.5/tools/sdk/esp32/bin/bootloader_dio_80m.bin",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),o("OutboundLink")],1)]),e._v(" "),o("li",[e._v("Download the boot_app0 from "),o("a",{attrs:{href:"https://github.com/espressif/arduino-esp32/raw/2.0.5/tools/partitions/boot_app0.bin",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),o("OutboundLink")],1)]),e._v(" "),o("li",[e._v("Download the flash tool utility from espressif:\nhttps://www.espressif.com/en/products/hardware/esp32/resources")]),e._v(" "),o("li",[e._v("Uncompress the package")]),e._v(" "),o("li",[e._v("Execute "),o("code",[e._v("flash_download_tools")])]),e._v(" "),o("li",[e._v("Choose Developer mode")]),e._v(" "),o("li",[e._v("Choose ESP32 DownloadTool")]),e._v(" "),o("li",[e._v("Set the files and the address as below:\n"),o("img",{attrs:{src:t(388),alt:"Flash download tool"}})]),e._v(" "),o("li",[e._v("Set the config as above")]),e._v(" "),o("li",[e._v("Connect your ESP32 board and select the COM port")]),e._v(" "),o("li",[e._v("Click on erase if it is your first upload")]),e._v(" "),o("li",[e._v("If you see SYNC (above the START button) for more than 5 seconds, press the boot button of your ESP32")]),e._v(" "),o("li",[e._v("Once done you can click on START button")]),e._v(" "),o("li",[e._v("If you see SYNC (above the START button) for more than 5 seconds, press the boot button of your ESP32\nThe upload details appears in the rear shell windows, you can see also the progress bar changing.")]),e._v(" "),o("li",[e._v('Once done the flash tool display "FINISH" like below\n'),o("img",{attrs:{src:t(389),alt:"Flash download tool 2"}})])]),e._v(" "),o("h3",{attrs:{id:"linux-esptool-py"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#linux-esptool-py"}},[e._v("#")]),e._v(" Linux - esptool.py")]),e._v(" "),o("p",[e._v("If you want to upload the ready-to-go binary from Linux (or any other OS where you have Python) you can use the "),o("a",{attrs:{href:"https://github.com/espressif/esptool",target:"_blank",rel:"noopener noreferrer"}},[e._v("esptool.py"),o("OutboundLink")],1),e._v(". This an official Python based flashing tool from Espressif for ESP82XX and ESP32.")]),e._v(" "),o("ul",[o("li",[o("p",[e._v("Install esptool from PyPI via pip: "),o("code",[e._v("pip install esptool")]),e._v(" (or using the python package manager of your choice)")])]),e._v(" "),o("li",[o("p",[e._v("Now you should be able to run "),o("code",[e._v("esptool.py -h")]),e._v(" to see a summary of all available commands, command line options and verify the installation")])]),e._v(" "),o("li",[o("p",[e._v("Download the bootloader, boot_app0 and the binary for your board from the respective links "),o("a",{attrs:{href:"#esp32"}},[e._v("above")])])]),e._v(" "),o("li",[o("p",[e._v("Use the below command to upload the binary files to the board (change file names and serial port as needed, for Windows use port number e.g.: "),o("code",[e._v("COM4")]),e._v("):")]),e._v(" "),o("div",{staticClass:"language- extra-class"},[o("pre",[o("code",[e._v("esptool.py --port /dev/ttyUSB0 --chip esp32 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dout --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader_dio_80m.bin 0x8000 esp32dev-ble-cont-partitions.bin 0x10000 esp32dev-ble-cont-firmware.bin\n")])])])]),e._v(" "),o("li",[o("p",[e._v("Output for a successful upload should look like this:")]),e._v(" "),o("div",{staticClass:"language- extra-class"},[o("pre",[o("code",[e._v("esptool.py v2.8\nSerial port /dev/ttyUSB0\nConnecting.....\nChip is ESP32D0WDQ6 (revision 1)\nFeatures: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None\nCrystal is 40MHz\nMAC: 30:ae:a4:ff:48:14\nUploading stub...\nRunning stub...\nStub running...\nChanging baud rate to 921600\nChanged.\nConfiguring flash size...\nAuto-detected Flash size: 4MB\nCompressed 8192 bytes to 47...\nWrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 15741.5 kbit/s)...\nHash of data verified.\nFlash params set to 0x0320\nCompressed 17312 bytes to 11972...\nWrote 17312 bytes (11972 compressed) at 0x00001000 in 0.2 seconds (effective 903.1 kbit/s)...\nHash of data verified.\nCompressed 3072 bytes to 129...\nWrote 3072 bytes (129 compressed) at 0x00008000 in 0.0 seconds (effective 5168.4 kbit/s)...\nHash of data verified.\nCompressed 1444624 bytes to 838880...\nWrote 1444624 bytes (838880 compressed) at 0x00010000 in 13.1 seconds (effective 881.2 kbit/s)...\nHash of data verified.\n\nLeaving...\nHard resetting via RTS pin...\n")])])])]),e._v(" "),o("li",[o("p",[e._v("The board resets after the upload and boots the gateway firmware")])])]),e._v(" "),o("h3",{attrs:{id:"mac-esptool-py"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#mac-esptool-py"}},[e._v("#")]),e._v(" Mac - esptool.py")]),e._v(" "),o("p",[e._v("The approach for Mac is similiar to Linux. You need to install "),o("a",{attrs:{href:"https://brew.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("Brew"),o("OutboundLink")],1),e._v(" for Mac to use "),o("a",{attrs:{href:"https://docs.brew.sh/Homebrew-and-Python",target:"_blank",rel:"noopener noreferrer"}},[e._v("pip"),o("OutboundLink")],1),e._v(".\nThe esptool.py tool needs to be adressed explicitly with .py at the end.\nIf you do fail with the command, run "),o("code",[e._v("esptool.py chip_id")]),e._v(" to let your Mac check for the ESP32 on your serial ports. A common failure for this looks like this:")]),e._v(" "),o("div",{staticClass:"language- extra-class"},[o("pre",[o("code",[e._v(" A fatal error occurred: Unable to verify flash chip connection (Invalid head of packet (0xE0): Possible serial noise or corruption.).\n")])])]),o("p",[e._v("If you receive this error")]),e._v(" "),o("div",{staticClass:"language- extra-class"},[o("pre",[o("code",[e._v(" A fatal error occurred: Unable to verify flash chip connection (Packet content transfer stopped (received 7 bytes)).\n")])])]),o("p",[e._v("while flashing, try to reduce the baud rate to "),o("code",[e._v("--baud 115200")]),e._v(", as this seems to help in most cases.")]),e._v(" "),o("h2",{attrs:{id:"esp8266"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#esp8266"}},[e._v("#")]),e._v(" ESP8266")]),e._v(" "),o("ul",[o("li",[e._v("Download the NodeMCU Py Flasher tool :\nhttps://github.com/marcelstoer/nodemcu-pyflasher/releases")]),e._v(" "),o("li",[e._v("Execute "),o("code",[e._v("NodeMCU-PyFlasher")])]),e._v(" "),o("li",[e._v("Set the files and parameters as below:\n"),o("img",{attrs:{src:t(390),alt:"NodeMCU Py Flasher"}})]),e._v(" "),o("li",[e._v("Connect your board and select the COM port")]),e._v(" "),o("li",[e._v("Click on "),o("em",[e._v("FlashNodeMCU")]),e._v("\nThe upload details appears.")])]),e._v(" "),o("p",[e._v("With an ESP if you did not set your network and MQTT parameters manually you can now open the "),o("RouterLink",{attrs:{to:"/upload/portal.html"}},[e._v("web portal configuration")]),e._v(".")],1),e._v(" "),o("p",[e._v("Note that to reset the wifi and MQTT settings you can check "),o("em",[e._v("yes, wipes all data")])]),e._v(" "),o("p",[o("a",{attrs:{href:"https://hits.seeyoufarm.com",target:"_blank",rel:"noopener noreferrer"}},[o("img",{attrs:{src:"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fdocs.openmqttgateway.com%2Fupload%2Fbinaries.html&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false",alt:"Hits"}}),o("OutboundLink")],1)])])}),[],!1,null,null,null);o.default=s.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/28.afe597be.js b/dev/assets/js/28.e39b2171.js similarity index 99% rename from dev/assets/js/28.afe597be.js rename to dev/assets/js/28.e39b2171.js index 731d5df8..ea1a5764 100644 --- a/dev/assets/js/28.afe597be.js +++ b/dev/assets/js/28.e39b2171.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{393:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_menu.f1eb2987.png"},394:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_enter_parameters.e94d359c.png"},395:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_save.cb8305ec.png"},454:function(t,e,a){"use strict";a.r(e);var s=a(14),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"wifi-and-mqtt-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#wifi-and-mqtt-configuration"}},[t._v("#")]),t._v(" Wifi and MQTT configuration")]),t._v(" "),e("h2",{attrs:{id:"configuration-portal"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuration-portal"}},[t._v("#")]),t._v(" Configuration portal")]),t._v(" "),e("p",[t._v("Once loaded into your ESP, and if you don't use the manual configuration, you have to set your network parameters with WiFi Manager portal.")]),t._v(" "),e("p",[t._v("From your smartphone, search for  OpenMQTTGateway or OMG_ WiFi network and connect to it without password, or if you are using a device sold by Theengs or the macro "),e("code",[t._v("-DWM_PWD_FROM_MAC=true")]),t._v(", the password will be the last eight digits of the device MAC Address with upper case.\nExample, the password would be "),e("code",[t._v("CCDDEEFF")]),t._v(" for a MAC Address "),e("code",[t._v("AABBCCDDEEFF")]),t._v(".\nFor the Theengs Plug, the MAC Address can be found on the device sticker, and for all the devices, it is printed on the serial monitor logs.")]),t._v(" "),e("p",[t._v('Once connected to the WiFi, a web page should appear. On Android, you may also have a popup asking you if you want to connect to it without an internet connection. Answer yes always/all the time. If the web page doesn\'t appear, click on the WiFi Access Point and "Manage router".')]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("For boards with an ethernet port you can also access to the Wifi Manager portal through the LAN board IP address.")])]),t._v(" "),e("p",[e("img",{attrs:{src:a(393),alt:"WiFi manager menu"}})]),t._v(" "),e("ul",[e("li",[t._v("Click on Configure WiFi")])]),t._v(" "),e("p",[e("img",{attrs:{src:a(394),alt:"WiFi manager parameters"}})]),t._v(" "),e("ul",[e("li",[t._v("Select your WiFi")]),t._v(" "),e("li",[t._v("Set your WiFi password")])]),t._v(" "),e("p",[t._v("::: note\nIf the board is connected by ethernet, the Wifi and password can be empty. If you fill them the board will use this wifi as a fallback connectivity method.\n:::")]),t._v(" "),e("ul",[e("li",[t._v("Set your MQTT Server IP or domain name (for Home Assistant you can enter "),e("code",[t._v("homeassistant.local")]),t._v(" if your server is configured with mDNS)")]),t._v(" "),e("li",[t._v("Set your MQTT Server Port (default: 1883)")]),t._v(" "),e("li",[t._v("Set your MQTT Server username (optional, 64 characters maximum)")]),t._v(" "),e("li",[t._v("Set your MQTT Server password (optional, 64 characters maximum)")]),t._v(" "),e("li",[t._v("Set your MQTT base topic if you need to change it (you must keep the / at the end) (default: home/, 64 characters maximum)")]),t._v(" "),e("li",[t._v("Set your gateway name if you need to change it")]),t._v(" "),e("li",[t._v("Set your gateway password (default: empty, 8 characters minimum, 64 maximum), this password is used for\n"),e("ul",[e("li",[t._v("Local and remote OTA")]),t._v(" "),e("li",[t._v('WebUI login (login:"admin", password: "")')]),t._v(" "),e("li",[t._v("WiFi Manager Access Point password after initial config")])])]),t._v(" "),e("li",[t._v("Set the MQTT secure connection box to select whether or not the connection should be secure")]),t._v(" "),e("li",[t._v("Set the certificate validation to select wether or not you want to validate the server identity with a certificate")]),t._v(" "),e("li",[t._v("Copy/paste the MQTT server certificate in the MQTT server cert box (only required if using a secure connection), be sure to include the "),e("code",[t._v("-----BEGIN CERTIFICATE-----")]),t._v(" and "),e("code",[t._v("-----END CERTIFICATE-----")]),t._v(" markers")]),t._v(" "),e("li",[t._v("Add your certificates")]),t._v(" "),e("li",[t._v("Click on save")])]),t._v(" "),e("p",[e("img",{attrs:{src:a(395),alt:"WiFi manager save"}})]),t._v(" "),e("p",[t._v("The ESP restart and connect to your network. Note that your credentials are saved into the ESP memory, if you want to redo the configuration you have to erase the ESP memory with the flash download tool.")]),t._v(" "),e("p",[t._v("Once done the gateway should connect to your network and your broker, you should see it into the broker in the form of the following messages:")]),t._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("home/OpenMQTTGateway/LWT Online \n")])]),t._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br")])]),e("p",[t._v("Note that the web portal appears only on first boot, if you want to configure again the setting you can do a long press on TRIGGER_GPIO, "),e("RouterLink",{attrs:{to:"/use/gateway.html#erase-the-esp-settings"}},[t._v("erase the settings")]),t._v(" or Reset the configuration from the WebUI.")],1),t._v(" "),e("h2",{attrs:{id:"build-time-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build-time-configuration"}},[t._v("#")]),t._v(" Build time configuration")]),t._v(" "),e("p",[t._v("You can configure your MQTT server credentials and network configuration before building the application. It can be done either in Arduino or in Platformio IDE thought the User_config.h file. Note that with Platformio IDE you can also set your credentials into the platformio.ini file or an *_env.ini file, here is an example with the Olimex ESP32 gateway:")]),t._v(" "),e("div",{staticClass:"language-ini line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-ini"}},[e("code",[e("span",{pre:!0,attrs:{class:"token section"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token section-name selector"}},[t._v("env:esp32-olimex-gtw-ble")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("platform")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("${com.esp32_platform}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("platform_packages")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("${com.esp32_platform_packages}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("board")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("esp32-gateway")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("board_build.partitions")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("min_spiffs.csv")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("lib_deps")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v("\n ${com-esp.lib_deps}\n ${libraries.ble}\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("build_flags")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v("\n ${com-esp.build_flags}\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DZgatewayBT")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v('"BT"\'')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DLED_INFO")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("33'")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DLED_INFO_ON")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("1'")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DESP32_ETHERNET")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("true'")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DMQTT_SERVER")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v('"11.22.33.44"\'')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DMQTT_USER")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v('"salut"\'')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DMQTT_PASS")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v('"atoi"\'')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DGateway_Name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v('"OpenMQTTGateway_ESP32_OLM_GTW"\'')]),t._v("\n")])]),t._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br"),e("span",{staticClass:"line-number"},[t._v("2")]),e("br"),e("span",{staticClass:"line-number"},[t._v("3")]),e("br"),e("span",{staticClass:"line-number"},[t._v("4")]),e("br"),e("span",{staticClass:"line-number"},[t._v("5")]),e("br"),e("span",{staticClass:"line-number"},[t._v("6")]),e("br"),e("span",{staticClass:"line-number"},[t._v("7")]),e("br"),e("span",{staticClass:"line-number"},[t._v("8")]),e("br"),e("span",{staticClass:"line-number"},[t._v("9")]),e("br"),e("span",{staticClass:"line-number"},[t._v("10")]),e("br"),e("span",{staticClass:"line-number"},[t._v("11")]),e("br"),e("span",{staticClass:"line-number"},[t._v("12")]),e("br"),e("span",{staticClass:"line-number"},[t._v("13")]),e("br"),e("span",{staticClass:"line-number"},[t._v("14")]),e("br"),e("span",{staticClass:"line-number"},[t._v("15")]),e("br"),e("span",{staticClass:"line-number"},[t._v("16")]),e("br"),e("span",{staticClass:"line-number"},[t._v("17")]),e("br"),e("span",{staticClass:"line-number"},[t._v("18")]),e("br")])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{393:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_menu.f1eb2987.png"},394:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_enter_parameters.e94d359c.png"},395:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_save.cb8305ec.png"},455:function(t,e,a){"use strict";a.r(e);var s=a(14),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"wifi-and-mqtt-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#wifi-and-mqtt-configuration"}},[t._v("#")]),t._v(" Wifi and MQTT configuration")]),t._v(" "),e("h2",{attrs:{id:"configuration-portal"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuration-portal"}},[t._v("#")]),t._v(" Configuration portal")]),t._v(" "),e("p",[t._v("Once loaded into your ESP, and if you don't use the manual configuration, you have to set your network parameters with WiFi Manager portal.")]),t._v(" "),e("p",[t._v("From your smartphone, search for  OpenMQTTGateway or OMG_ WiFi network and connect to it without password, or if you are using a device sold by Theengs or the macro "),e("code",[t._v("-DWM_PWD_FROM_MAC=true")]),t._v(", the password will be the last eight digits of the device MAC Address with upper case.\nExample, the password would be "),e("code",[t._v("CCDDEEFF")]),t._v(" for a MAC Address "),e("code",[t._v("AABBCCDDEEFF")]),t._v(".\nFor the Theengs Plug, the MAC Address can be found on the device sticker, and for all the devices, it is printed on the serial monitor logs.")]),t._v(" "),e("p",[t._v('Once connected to the WiFi, a web page should appear. On Android, you may also have a popup asking you if you want to connect to it without an internet connection. Answer yes always/all the time. If the web page doesn\'t appear, click on the WiFi Access Point and "Manage router".')]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("For boards with an ethernet port you can also access to the Wifi Manager portal through the LAN board IP address.")])]),t._v(" "),e("p",[e("img",{attrs:{src:a(393),alt:"WiFi manager menu"}})]),t._v(" "),e("ul",[e("li",[t._v("Click on Configure WiFi")])]),t._v(" "),e("p",[e("img",{attrs:{src:a(394),alt:"WiFi manager parameters"}})]),t._v(" "),e("ul",[e("li",[t._v("Select your WiFi")]),t._v(" "),e("li",[t._v("Set your WiFi password")])]),t._v(" "),e("p",[t._v("::: note\nIf the board is connected by ethernet, the Wifi and password can be empty. If you fill them the board will use this wifi as a fallback connectivity method.\n:::")]),t._v(" "),e("ul",[e("li",[t._v("Set your MQTT Server IP or domain name (for Home Assistant you can enter "),e("code",[t._v("homeassistant.local")]),t._v(" if your server is configured with mDNS)")]),t._v(" "),e("li",[t._v("Set your MQTT Server Port (default: 1883)")]),t._v(" "),e("li",[t._v("Set your MQTT Server username (optional, 64 characters maximum)")]),t._v(" "),e("li",[t._v("Set your MQTT Server password (optional, 64 characters maximum)")]),t._v(" "),e("li",[t._v("Set your MQTT base topic if you need to change it (you must keep the / at the end) (default: home/, 64 characters maximum)")]),t._v(" "),e("li",[t._v("Set your gateway name if you need to change it")]),t._v(" "),e("li",[t._v("Set your gateway password (default: empty, 8 characters minimum, 64 maximum), this password is used for\n"),e("ul",[e("li",[t._v("Local and remote OTA")]),t._v(" "),e("li",[t._v('WebUI login (login:"admin", password: "")')]),t._v(" "),e("li",[t._v("WiFi Manager Access Point password after initial config")])])]),t._v(" "),e("li",[t._v("Set the MQTT secure connection box to select whether or not the connection should be secure")]),t._v(" "),e("li",[t._v("Set the certificate validation to select wether or not you want to validate the server identity with a certificate")]),t._v(" "),e("li",[t._v("Copy/paste the MQTT server certificate in the MQTT server cert box (only required if using a secure connection), be sure to include the "),e("code",[t._v("-----BEGIN CERTIFICATE-----")]),t._v(" and "),e("code",[t._v("-----END CERTIFICATE-----")]),t._v(" markers")]),t._v(" "),e("li",[t._v("Add your certificates")]),t._v(" "),e("li",[t._v("Click on save")])]),t._v(" "),e("p",[e("img",{attrs:{src:a(395),alt:"WiFi manager save"}})]),t._v(" "),e("p",[t._v("The ESP restart and connect to your network. Note that your credentials are saved into the ESP memory, if you want to redo the configuration you have to erase the ESP memory with the flash download tool.")]),t._v(" "),e("p",[t._v("Once done the gateway should connect to your network and your broker, you should see it into the broker in the form of the following messages:")]),t._v(" "),e("div",{staticClass:"language- line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("home/OpenMQTTGateway/LWT Online \n")])]),t._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br")])]),e("p",[t._v("Note that the web portal appears only on first boot, if you want to configure again the setting you can do a long press on TRIGGER_GPIO, "),e("RouterLink",{attrs:{to:"/use/gateway.html#erase-the-esp-settings"}},[t._v("erase the settings")]),t._v(" or Reset the configuration from the WebUI.")],1),t._v(" "),e("h2",{attrs:{id:"build-time-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build-time-configuration"}},[t._v("#")]),t._v(" Build time configuration")]),t._v(" "),e("p",[t._v("You can configure your MQTT server credentials and network configuration before building the application. It can be done either in Arduino or in Platformio IDE thought the User_config.h file. Note that with Platformio IDE you can also set your credentials into the platformio.ini file or an *_env.ini file, here is an example with the Olimex ESP32 gateway:")]),t._v(" "),e("div",{staticClass:"language-ini line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-ini"}},[e("code",[e("span",{pre:!0,attrs:{class:"token section"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token section-name selector"}},[t._v("env:esp32-olimex-gtw-ble")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("platform")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("${com.esp32_platform}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("platform_packages")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("${com.esp32_platform_packages}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("board")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("esp32-gateway")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("board_build.partitions")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("min_spiffs.csv")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("lib_deps")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v("\n ${com-esp.lib_deps}\n ${libraries.ble}\n"),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("build_flags")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v("\n ${com-esp.build_flags}\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DZgatewayBT")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v('"BT"\'')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DLED_INFO")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("33'")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DLED_INFO_ON")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("1'")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DESP32_ETHERNET")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v("true'")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DMQTT_SERVER")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v('"11.22.33.44"\'')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DMQTT_USER")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v('"salut"\'')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DMQTT_PASS")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v('"atoi"\'')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key attr-name"}},[t._v("'-DGateway_Name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token value attr-value"}},[t._v('"OpenMQTTGateway_ESP32_OLM_GTW"\'')]),t._v("\n")])]),t._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br"),e("span",{staticClass:"line-number"},[t._v("2")]),e("br"),e("span",{staticClass:"line-number"},[t._v("3")]),e("br"),e("span",{staticClass:"line-number"},[t._v("4")]),e("br"),e("span",{staticClass:"line-number"},[t._v("5")]),e("br"),e("span",{staticClass:"line-number"},[t._v("6")]),e("br"),e("span",{staticClass:"line-number"},[t._v("7")]),e("br"),e("span",{staticClass:"line-number"},[t._v("8")]),e("br"),e("span",{staticClass:"line-number"},[t._v("9")]),e("br"),e("span",{staticClass:"line-number"},[t._v("10")]),e("br"),e("span",{staticClass:"line-number"},[t._v("11")]),e("br"),e("span",{staticClass:"line-number"},[t._v("12")]),e("br"),e("span",{staticClass:"line-number"},[t._v("13")]),e("br"),e("span",{staticClass:"line-number"},[t._v("14")]),e("br"),e("span",{staticClass:"line-number"},[t._v("15")]),e("br"),e("span",{staticClass:"line-number"},[t._v("16")]),e("br"),e("span",{staticClass:"line-number"},[t._v("17")]),e("br"),e("span",{staticClass:"line-number"},[t._v("18")]),e("br")])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/29.f818a589.js b/dev/assets/js/29.318b3755.js similarity index 97% rename from dev/assets/js/29.f818a589.js rename to dev/assets/js/29.318b3755.js index 72dfbe34..746c8d30 100644 --- a/dev/assets/js/29.f818a589.js +++ b/dev/assets/js/29.318b3755.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{405:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTGateway_LORA_Configuration.5c98d6c0.png"},406:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTgateway_ESP32_LORA_MSG.fb1b38be.png"},407:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTGateway_TTGO32_LORA_Receive.d2b3af7b.jpg"},461:function(t,a,e){"use strict";e.r(a);var s=e(14),r=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"lora-gateway"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#lora-gateway"}},[t._v("#")]),t._v(" LoRa gateway")]),t._v(" "),a("h2",{attrs:{id:"what-is-a-lora-gateway"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-is-a-lora-gateway"}},[t._v("#")]),t._v(" What is a LoRa gateway")]),t._v(" "),a("p",[t._v("A LoRa (Long Range) gateway is a device that facilitates communication between LoRa nodes and networks, enabling the transmission and reception of data over long distances using the LoRa modulation technique. It's designed to work with devices that utilize LoRa technology, such as the MakerFab soil and moisture sensor, devices from PricelessTookit and DIY sensors.")]),t._v(" "),a("p",[t._v("The primary distinction between a LoRa gateway and a LoRaWAN gateway lies in the protocol and network architecture:")]),t._v(" "),a("p",[t._v("LoRa gateway: Focuses solely on the physical layer, utilizing the LoRa modulation for communication. It's responsible for receiving and transmitting raw LoRa signals without concerning itself with network protocols or data handling at higher layers. Being focused solely on the physical layer, a LoRa gateway offers greater flexibility for customization and experimentation. The OpenMQTTGateway LoRa gateway receives raw LoRa signals, processes them, and publishes the data to an MQTT topic. Conversely, it can subscribe to MQTT topics and send commands to LoRa devices. This gateway is particularly useful for DIY projects, home automation enthusiasts, and scenarios where direct integration of LoRa devices with MQTT is desired.")]),t._v(" "),a("p",[t._v("LoRaWAN gateway: Operates at a higher layer and is part of the LoRaWAN network architecture. LoRaWAN is a protocol specification built on top of the LoRa technology, providing features like adaptive data rate, encryption, and multi-channel/multi-modulation. A LoRaWAN gateway handles the data from multiple LoRa nodes, forwards it to a centralized network server, which then manages the data and communicates back to the nodes.")]),t._v(" "),a("p",[t._v("In essence, while both gateways utilize LoRa technology for communication, a LoRaWAN gateway is more sophisticated, offering advanced features and integration with the LoRaWAN network infrastructure. The LoRa gateway, with its simpler architecture, is ideal for small networks of nodes, offering easier setup and configuration, making it an interesting choice for users keen on experimenting with LoRa technology.")]),t._v(" "),a("h2",{attrs:{id:"configuring-the-lora-gateway"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuring-the-lora-gateway"}},[t._v("#")]),t._v(" Configuring the LoRa gateway")]),t._v(" "),a("p",[t._v('The LoRa gateway can be configured by MQTT commands or by using the WebUI, here are the parameters available, they can be combined with the key "save" or "erase":')]),t._v(" "),a("ul",[a("li",[t._v("txpower: 0 to 14")]),t._v(" "),a("li",[t._v("spreadingfactor: 7 to 12")]),t._v(" "),a("li",[t._v("frequency: 433000000, 868000000, 915000000")]),t._v(" "),a("li",[t._v("signalbandwidth: 7800, 10400, 15500, 20800, 31250, 41700, 62500, 125000, and 250000")]),t._v(" "),a("li",[t._v("codingrate: 5 to 8")]),t._v(" "),a("li",[t._v("preamblelength: 6 to 65535")]),t._v(" "),a("li",[t._v("syncword: byte")]),t._v(" "),a("li",[t._v("enablecrc: boolean")]),t._v(" "),a("li",[t._v("invertiq: boolean")]),t._v(" "),a("li",[t._v("onlyknown: boolean")])]),t._v(" "),a("p",[t._v("With the WebUI:\n"),a("img",{attrs:{src:e(405),alt:"LoRa configuration page"}})]),t._v(" "),a("p",[t._v("With MQTT commands:\n"),a("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoLORA/config -m \'{"frequency":"433000000","save":true}\'')])]),t._v(" "),a("h2",{attrs:{id:"receiving-data-from-lora-signal"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-lora-signal"}},[t._v("#")]),t._v(" Receiving data from LoRa signal")]),t._v(" "),a("p",[t._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),t._v(" "),a("p",[a("code",[t._v("sudo mosquitto_sub -t +/# -v")])]),t._v(" "),a("p",[t._v("Generate your LoRa signals by using another LoRa module, you can flash the sender program from "),a("RouterLink",{attrs:{to:"/examples/LoraTemperature/"}},[t._v("this example")]),t._v(" to an ESP32 LoRa board, this sample node will generate a LoRa signal containing the ESP32 internal temperature.")],1),t._v(" "),a("p",[t._v("Once one board flashed with OMG and the other with the sender program you should receive regular packets into "),a("code",[t._v("home/OpenMQTTGateway_ESP32_LORA_TEST/LORAtoMQTT/AABBCCDDEEFF")]),t._v(" like below:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AA:BB:CC:DD:EE:FF"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rssi"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"snr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9.25")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pferror"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-3598")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"packetSize"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tempc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"55.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AA:BB:CC:DD:EE:FF"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rssi"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-26")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"snr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pferror"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-3598")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"packetSize"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tempc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"55.4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AA:BB:CC:DD:EE:FF"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rssi"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"snr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9.5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pferror"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-3581")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"packetSize"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tempc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"57"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("p",[a("img",{attrs:{src:e(406),alt:"LoRa board receiving data"}})]),t._v(" "),a("p",[t._v("Messages that contain non-printable characters will be converted to hexadecimal and look like this:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rssi"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-121")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"snr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-11.75")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pferror"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-29116")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"packetSize"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hex"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"C0FFEE"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v('They can be filtered by setting the "onlyknown" command to '),a("code",[t._v("true")]),t._v(" or by an activation into the WebUI or Home Assistant.")]),t._v(" "),a("p",[t._v("And from a supported device (in this case, a WiPhone), looks like this:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rssi"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-50")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"snr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9.25")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pferror"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20728")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"packetSize"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"from"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"123ABC"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"to"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"000000"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"message"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hi from WiPhone"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"WiPhone"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("h2",{attrs:{id:"send-data-by-mqtt-to-convert-it-on-lora-signal"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-lora-signal"}},[t._v("#")]),t._v(" Send data by MQTT to convert it on LoRa signal")]),t._v(" "),a("p",[a("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoLORA -m \'{"message":"hello OMG1"}\'')])]),t._v(" "),a("p",[t._v('This command will send by LoRa the message "hello OMG1" and use the default parameters defined in '),a("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/4b8d28179b63ae3f3d454da57ec8c109c159c386/config_LORA.h#L32",target:"_blank",rel:"noopener noreferrer"}},[t._v("config_LORA.h"),a("OutboundLink")],1)]),t._v(" "),a("p",[a("img",{attrs:{src:e(407),alt:"TTGO Lora receiving packets"}})]),t._v(" "),a("p",[t._v("If you want to test that your sending works you can use another TTGO LoRa module, you can flash the receiver program from "),a("a",{attrs:{href:"https://github.com/LilyGO/TTGO-LORA32-V2.0",target:"_blank",rel:"noopener noreferrer"}},[t._v("this repository"),a("OutboundLink")],1),t._v(" and the SSD1306 library "),a("a",{attrs:{href:"https://github.com/ThingPulse/esp8266-oled-ssd1306",target:"_blank",rel:"noopener noreferrer"}},[t._v("there"),a("OutboundLink")],1)]),t._v(" "),a("h2",{attrs:{id:"send-data-by-mqtt-with-advanced-lora-parameters"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-with-advanced-lora-parameters"}},[t._v("#")]),t._v(" Send data by MQTT with advanced LoRa parameters")]),t._v(" "),a("ul",[a("li",[t._v("Plain text message: "),a("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoLORA -m \'{"message":"test8","txpower":17}\'')]),a("br"),t._v('\nwill make LoRa use the a txpower of 17 when sending the message "test8"')]),t._v(" "),a("li",[t._v("Binary message: "),a("code",[t._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoLORA" -m \'{"hex":"01C0FFEE"}\'')]),a("br"),t._v("\nwill send binary 0x01C0FFEE")]),t._v(" "),a("li",[t._v("WiPhone message: "),a("code",[t._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoLORA" -m \'{"message":"test","type":"WiPhone","to":"123ABC","from":"FFFFFF"}\'')]),a("br"),t._v('\nwill send "test" to a WiPhone with chip ID 123ABC')])]),t._v(" "),a("p",[t._v("More info on where the LoRa library is born "),a("a",{attrs:{href:"https://github.com/sandeepmistry/arduino-LoRa/blob/master/API.md#radio-parameters",target:"_blank",rel:"noopener noreferrer"}},[t._v("@sandeepmistry"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("Tutorial on how to leverage LoRa for a mailbox sensor from "),a("a",{attrs:{href:"https://www.youtube.com/channel/UCz75N6inuLHXnRC5tqagNLw",target:"_blank",rel:"noopener noreferrer"}},[t._v("PricelessToolkit"),a("OutboundLink")],1),t._v(":\n"),a("iframe",{attrs:{width:"560",height:"315",src:"https://www.youtube.com/embed/6DftaHxDawM",frameborder:"0",allow:"autoplay; encrypted-media",allowfullscreen:""}})])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{412:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTGateway_LORA_Configuration.5c98d6c0.png"},413:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTgateway_ESP32_LORA_MSG.fb1b38be.png"},414:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTGateway_TTGO32_LORA_Receive.d2b3af7b.jpg"},465:function(t,a,e){"use strict";e.r(a);var s=e(14),r=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"lora-gateway"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#lora-gateway"}},[t._v("#")]),t._v(" LoRa gateway")]),t._v(" "),a("h2",{attrs:{id:"what-is-a-lora-gateway"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-is-a-lora-gateway"}},[t._v("#")]),t._v(" What is a LoRa gateway")]),t._v(" "),a("p",[t._v("A LoRa (Long Range) gateway is a device that facilitates communication between LoRa nodes and networks, enabling the transmission and reception of data over long distances using the LoRa modulation technique. It's designed to work with devices that utilize LoRa technology, such as the MakerFab soil and moisture sensor, devices from PricelessTookit and DIY sensors.")]),t._v(" "),a("p",[t._v("The primary distinction between a LoRa gateway and a LoRaWAN gateway lies in the protocol and network architecture:")]),t._v(" "),a("p",[t._v("LoRa gateway: Focuses solely on the physical layer, utilizing the LoRa modulation for communication. It's responsible for receiving and transmitting raw LoRa signals without concerning itself with network protocols or data handling at higher layers. Being focused solely on the physical layer, a LoRa gateway offers greater flexibility for customization and experimentation. The OpenMQTTGateway LoRa gateway receives raw LoRa signals, processes them, and publishes the data to an MQTT topic. Conversely, it can subscribe to MQTT topics and send commands to LoRa devices. This gateway is particularly useful for DIY projects, home automation enthusiasts, and scenarios where direct integration of LoRa devices with MQTT is desired.")]),t._v(" "),a("p",[t._v("LoRaWAN gateway: Operates at a higher layer and is part of the LoRaWAN network architecture. LoRaWAN is a protocol specification built on top of the LoRa technology, providing features like adaptive data rate, encryption, and multi-channel/multi-modulation. A LoRaWAN gateway handles the data from multiple LoRa nodes, forwards it to a centralized network server, which then manages the data and communicates back to the nodes.")]),t._v(" "),a("p",[t._v("In essence, while both gateways utilize LoRa technology for communication, a LoRaWAN gateway is more sophisticated, offering advanced features and integration with the LoRaWAN network infrastructure. The LoRa gateway, with its simpler architecture, is ideal for small networks of nodes, offering easier setup and configuration, making it an interesting choice for users keen on experimenting with LoRa technology.")]),t._v(" "),a("h2",{attrs:{id:"configuring-the-lora-gateway"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuring-the-lora-gateway"}},[t._v("#")]),t._v(" Configuring the LoRa gateway")]),t._v(" "),a("p",[t._v('The LoRa gateway can be configured by MQTT commands or by using the WebUI, here are the parameters available, they can be combined with the key "save" or "erase":')]),t._v(" "),a("ul",[a("li",[t._v("txpower: 0 to 14")]),t._v(" "),a("li",[t._v("spreadingfactor: 7 to 12")]),t._v(" "),a("li",[t._v("frequency: 433000000, 868000000, 915000000")]),t._v(" "),a("li",[t._v("signalbandwidth: 7800, 10400, 15500, 20800, 31250, 41700, 62500, 125000, and 250000")]),t._v(" "),a("li",[t._v("codingrate: 5 to 8")]),t._v(" "),a("li",[t._v("preamblelength: 6 to 65535")]),t._v(" "),a("li",[t._v("syncword: byte")]),t._v(" "),a("li",[t._v("enablecrc: boolean")]),t._v(" "),a("li",[t._v("invertiq: boolean")]),t._v(" "),a("li",[t._v("onlyknown: boolean")])]),t._v(" "),a("p",[t._v("With the WebUI:\n"),a("img",{attrs:{src:e(412),alt:"LoRa configuration page"}})]),t._v(" "),a("p",[t._v("With MQTT commands:\n"),a("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoLORA/config -m \'{"frequency":"433000000","save":true}\'')])]),t._v(" "),a("h2",{attrs:{id:"receiving-data-from-lora-signal"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-lora-signal"}},[t._v("#")]),t._v(" Receiving data from LoRa signal")]),t._v(" "),a("p",[t._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),t._v(" "),a("p",[a("code",[t._v("sudo mosquitto_sub -t +/# -v")])]),t._v(" "),a("p",[t._v("Generate your LoRa signals by using another LoRa module, you can flash the sender program from "),a("RouterLink",{attrs:{to:"/examples/LoraTemperature/"}},[t._v("this example")]),t._v(" to an ESP32 LoRa board, this sample node will generate a LoRa signal containing the ESP32 internal temperature.")],1),t._v(" "),a("p",[t._v("Once one board flashed with OMG and the other with the sender program you should receive regular packets into "),a("code",[t._v("home/OpenMQTTGateway_ESP32_LORA_TEST/LORAtoMQTT/AABBCCDDEEFF")]),t._v(" like below:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AA:BB:CC:DD:EE:FF"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rssi"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"snr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9.25")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pferror"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-3598")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"packetSize"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tempc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"55.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AA:BB:CC:DD:EE:FF"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rssi"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-26")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"snr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pferror"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-3598")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"packetSize"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tempc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"55.4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AA:BB:CC:DD:EE:FF"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rssi"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"snr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9.5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pferror"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-3581")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"packetSize"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tempc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"57"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("p",[a("img",{attrs:{src:e(413),alt:"LoRa board receiving data"}})]),t._v(" "),a("p",[t._v("Messages that contain non-printable characters will be converted to hexadecimal and look like this:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rssi"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-121")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"snr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-11.75")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pferror"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-29116")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"packetSize"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hex"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"C0FFEE"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v('They can be filtered by setting the "onlyknown" command to '),a("code",[t._v("true")]),t._v(" or by an activation into the WebUI or Home Assistant.")]),t._v(" "),a("p",[t._v("And from a supported device (in this case, a WiPhone), looks like this:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rssi"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("-50")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"snr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("9.25")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pferror"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20728")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"packetSize"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"from"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"123ABC"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"to"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"000000"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"message"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hi from WiPhone"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"WiPhone"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("h2",{attrs:{id:"send-data-by-mqtt-to-convert-it-on-lora-signal"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-lora-signal"}},[t._v("#")]),t._v(" Send data by MQTT to convert it on LoRa signal")]),t._v(" "),a("p",[a("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoLORA -m \'{"message":"hello OMG1"}\'')])]),t._v(" "),a("p",[t._v('This command will send by LoRa the message "hello OMG1" and use the default parameters defined in '),a("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/4b8d28179b63ae3f3d454da57ec8c109c159c386/config_LORA.h#L32",target:"_blank",rel:"noopener noreferrer"}},[t._v("config_LORA.h"),a("OutboundLink")],1)]),t._v(" "),a("p",[a("img",{attrs:{src:e(414),alt:"TTGO Lora receiving packets"}})]),t._v(" "),a("p",[t._v("If you want to test that your sending works you can use another TTGO LoRa module, you can flash the receiver program from "),a("a",{attrs:{href:"https://github.com/LilyGO/TTGO-LORA32-V2.0",target:"_blank",rel:"noopener noreferrer"}},[t._v("this repository"),a("OutboundLink")],1),t._v(" and the SSD1306 library "),a("a",{attrs:{href:"https://github.com/ThingPulse/esp8266-oled-ssd1306",target:"_blank",rel:"noopener noreferrer"}},[t._v("there"),a("OutboundLink")],1)]),t._v(" "),a("h2",{attrs:{id:"send-data-by-mqtt-with-advanced-lora-parameters"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-with-advanced-lora-parameters"}},[t._v("#")]),t._v(" Send data by MQTT with advanced LoRa parameters")]),t._v(" "),a("ul",[a("li",[t._v("Plain text message: "),a("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoLORA -m \'{"message":"test8","txpower":17}\'')]),a("br"),t._v('\nwill make LoRa use the a txpower of 17 when sending the message "test8"')]),t._v(" "),a("li",[t._v("Binary message: "),a("code",[t._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoLORA" -m \'{"hex":"01C0FFEE"}\'')]),a("br"),t._v("\nwill send binary 0x01C0FFEE")]),t._v(" "),a("li",[t._v("WiPhone message: "),a("code",[t._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoLORA" -m \'{"message":"test","type":"WiPhone","to":"123ABC","from":"FFFFFF"}\'')]),a("br"),t._v('\nwill send "test" to a WiPhone with chip ID 123ABC')])]),t._v(" "),a("p",[t._v("More info on where the LoRa library is born "),a("a",{attrs:{href:"https://github.com/sandeepmistry/arduino-LoRa/blob/master/API.md#radio-parameters",target:"_blank",rel:"noopener noreferrer"}},[t._v("@sandeepmistry"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("Tutorial on how to leverage LoRa for a mailbox sensor from "),a("a",{attrs:{href:"https://www.youtube.com/channel/UCz75N6inuLHXnRC5tqagNLw",target:"_blank",rel:"noopener noreferrer"}},[t._v("PricelessToolkit"),a("OutboundLink")],1),t._v(":\n"),a("iframe",{attrs:{width:"560",height:"315",src:"https://www.youtube.com/embed/6DftaHxDawM",frameborder:"0",allow:"autoplay; encrypted-media",allowfullscreen:""}})])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/30.39716eb5.js b/dev/assets/js/30.a35bbc54.js similarity index 98% rename from dev/assets/js/30.39716eb5.js rename to dev/assets/js/30.a35bbc54.js index 39f1cb28..33eb7b5a 100644 --- a/dev/assets/js/30.39716eb5.js +++ b/dev/assets/js/30.a35bbc54.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{410:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial1.4ba30145.jpg"},411:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial2.2746e668.jpg"},412:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_Pilight_Digoo-DG-R8S.be97bb23.png"},465:function(e,t,a){"use strict";a.r(t);var s=a(14),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"rf-gateways-433mhz-315mhz-868mhz-915mhz"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rf-gateways-433mhz-315mhz-868mhz-915mhz"}},[e._v("#")]),e._v(" RF gateways (433mhz/315mhz/868mhz/915mhz)")]),e._v(" "),t("h2",{attrs:{id:"what-is-an-rf-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#what-is-an-rf-gateway"}},[e._v("#")]),e._v(" What is an RF gateway")]),e._v(" "),t("p",[e._v("An RF (Radio Frequency) gateway is a device that facilitates communication between RF devices and other communication protocols, such as MQTT in this context. Operating at specific frequencies like 433MHz, 315MHz, 868MHz, and 915MHz, these gateways can receive signals from various RF devices, decode them, and then forward the decoded data to systems like Home Assistant, OpenHAB, or any other MQTT-based system.")]),e._v(" "),t("p",[e._v("The primary advantage of using an RF gateway is its ability to bridge the gap between the world of RF devices, which might include sensors, remote controls, and other RF-based gadgets, and modern smart home systems or applications. This enables users to integrate a wide range of devices into their smart home setup, even if those devices were not originally designed for such integration.")]),e._v(" "),t("p",[e._v("In the context of the 433MHz MQTT gateway, the device not only decodes RF signals but also allows for seamless integration with MQTT systems. This means that signals from RF devices can be easily published to MQTT topics, and likewise, MQTT messages can be translated into RF signals for transmission. This two-way communication capability makes the gateway a powerful tool for expanding the capabilities of both RF devices and MQTT systems.")]),e._v(" "),t("p",[e._v("OpenMQTTGateway leverages several libraries for RF communication:")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Library")]),e._v(" "),t("th",[e._v("Description")]),e._v(" "),t("th",[e._v("Device Support")]),e._v(" "),t("th",[e._v("Resource Requirements")]),e._v(" "),t("th",[e._v("Flexibility")]),e._v(" "),t("th",[e._v("Integration Capabilities")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("RTL_433")]),e._v(" "),t("td",[e._v("Maintained and performant library supporting receiving 433Mhz but also other frequencies (does not support sending)")]),e._v(" "),t("td",[e._v("Wide range of devices")]),e._v(" "),t("td",[e._v("Moderate")]),e._v(" "),t("td",[e._v("Decodes various protocols")]),e._v(" "),t("td",[e._v("Can be integrated with systems supporting Home Assistant Auto Discovery")])]),e._v(" "),t("tr",[t("td",[e._v("RCSwitch")]),e._v(" "),t("td",[e._v("Arduino library for 433MHz module communication.")]),e._v(" "),t("td",[e._v("Basic devices")]),e._v(" "),t("td",[e._v("Lightweight")]),e._v(" "),t("td",[e._v("Basic encoding and decoding")]),e._v(" "),t("td",[e._v("Basic integration")])]),e._v(" "),t("tr",[t("td",[e._v("Pilight")]),e._v(" "),t("td",[e._v("Open-source solution for device control and data retrieval.")]),e._v(" "),t("td",[e._v("Broad range of devices and protocols")]),e._v(" "),t("td",[e._v("Moderate")]),e._v(" "),t("td",[e._v("Offers raw and protocol-specific data handling")]),e._v(" "),t("td",[e._v("Structured data")])]),e._v(" "),t("tr",[t("td",[e._v("RF2")]),e._v(" "),t("td",[e._v("Library focused on KaKu devices and protocol.")]),e._v(" "),t("td",[e._v("Specific devices and protocols")]),e._v(" "),t("td",[e._v("Lightweight")]),e._v(" "),t("td",[e._v("Decoding and encoding capabilities")]),e._v(" "),t("td",[e._v("Basic integration")])])])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("INFO")]),e._v(" "),t("p",[e._v("RTL_433 library can only receive data, RCSwitch, PiLight, RF2 can receive and transmit.")])]),e._v(" "),t("h2",{attrs:{id:"common-parameters-accross-modules"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#common-parameters-accross-modules"}},[e._v("#")]),e._v(" Common parameters accross modules")]),e._v(" "),t("h3",{attrs:{id:"change-default-frequency-sx127x-and-cc1101"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-default-frequency-sx127x-and-cc1101"}},[e._v("#")]),e._v(" Change default frequency (SX127X and CC1101)")]),e._v(" "),t("p",[e._v("The frequency can be can changed by sending an MQTT message or through the WebUI. Parameter is "),t("code",[e._v("frequency")]),e._v(" and valid values are 300-348 Mhz, 387-464Mhz and 779-928Mhz. Actual frequency support will depend on your board")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/commands/MQTTtoRF/config {"frequency":315.026}')])]),e._v(" "),t("p",[e._v("Note that with CC1101 this frequency will be used as the default sending frequency.")]),e._v(" "),t("h3",{attrs:{id:"changing-active-receiver-modules"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#changing-active-receiver-modules"}},[e._v("#")]),e._v(" Changing Active Receiver Modules")]),e._v(" "),t("p",[e._v("Switching of the active transceiver (RTL_433 receiver only) module is available between the RF, RF2, and (RTL_433 or Pilight) gateway modules, allowing for changing of signal decoders without redeploying the OpenMQTTGateway package. Sending a JSON message to the command topic will change the active transceiver module.")]),e._v(" "),t("p",[e._v('To change the RF gateway module, which will receive, send a json message to the RF gateway module command subject (home/OpenMQTTGateway/commands/MQTTtoRF/config) with the corresponding value of the key "active"')]),e._v(" "),t("p",[e._v("1 - PiLight"),t("br"),e._v("\n2 - RF"),t("br"),e._v("\n3 - RTL_433"),t("br"),e._v("\n4 - RF2")]),e._v(" "),t("p",[e._v("Example to receive from the RF gateway:\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoRF/config" -m \'{"active":2}\'')])]),e._v(" "),t("p",[e._v("Example to receive from the Pilight gateway:\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoRF/config" -m \'{"active":1}\'')])]),e._v(" "),t("p",[e._v("The active receiver can also be changed with the WebUI.")]),e._v(" "),t("p",[e._v("The OpenMQTTGateway RFtoMQTT status message contains a key "),t("code",[e._v("active")]),e._v(" which is the current active receiver module.\nThere is example configuration entry for Homea Assistant in the intergrations doc.")]),e._v(" "),t("h2",{attrs:{id:"rtl-433-device-decoders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rtl-433-device-decoders"}},[e._v("#")]),e._v(" RTL_433 device decoders")]),e._v(" "),t("p",[e._v("This feature is only available on a ESP32 based device with a supported transceiver connected due to the resource requirements of the rtl_433 device decoders. At the present time only Pulse Position Modulation (OOK_PPM), Pulse Width Modulation (OOK_PWM) and Pulse Manchester Zero Bit (OOK_PULSE_MANCHESTER_ZEROBIT) based decoders are available.")]),e._v(" "),t("h3",{attrs:{id:"supported-hardware-combinations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supported-hardware-combinations"}},[e._v("#")]),e._v(" Supported hardware combinations")]),e._v(" "),t("ul",[t("li",[e._v("ESP32 based device with a CC1101 transceiver")]),e._v(" "),t("li",[e._v("Heltec WiFi LoRa 32 (V2.1) and LilyGo LoRa 32 V2.1")]),e._v(" "),t("li",[e._v("ESP32 DOIT DevKit V1 and Ai-Thinker R01 (SX1278)")]),e._v(" "),t("li",[e._v("ESP32 + SX1278/SX1276")])]),e._v(" "),t("h3",{attrs:{id:"supported-decoders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supported-decoders"}},[e._v("#")]),e._v(" Supported Decoders")]),e._v(" "),t("p",[e._v("For the most recent support decoder list please check the "),t("a",{attrs:{href:"https://github.com/NorthernMan54/rtl_433_ESP?tab=readme-ov-file#ook-signal-device-decoders",target:"_blank",rel:"noopener noreferrer"}},[e._v("rtl_433_esp"),t("OutboundLink")],1),e._v(" repository.")]),e._v(" "),t("h3",{attrs:{id:"change-signal-rssi-threshold-delta"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-signal-rssi-threshold-delta"}},[e._v("#")]),e._v(" Change Signal RSSI Threshold Delta")]),e._v(" "),t("p",[e._v("Delta applied to RSSI floor noise level to determine start and end of signal, defaults to 9db.")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/commands/MQTTtoRF/config {"rssithreshold": 9}')])]),e._v(" "),t("h3",{attrs:{id:"retrieve-current-status-of-receiver"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#retrieve-current-status-of-receiver"}},[e._v("#")]),e._v(" Retrieve current status of receiver")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/commands/MQTTtoRF/config {"status":1}')])]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{"model":"status",\n"protocol":"debug",\n"debug":0, - rtl_433 verbose setting\n"duration":11799327, - duration of current signal\n"Gap length":-943575, - duration of gap between current signal\n"rssi":-38, - most recent received signal strength\n"train":1, - signal processing train #\n"messageCount":3, - total number of signals received\n"totalSignals":9, - RegOokFix signal quality count ( of 10 )\n"ignoredSignals":0, - RegOokFix signal quality ignored signals\n"unparsedSignals":3, - RegOokFix signal quality unparseable signals\n"_enabledReceiver":1, - which receiver is enabled\n"receiveMode":0, - is the receiver currently receiving a signal\n"currentRssi":-89, - current rssi level\n"rssiThreshold":-82, - minimum rssi level to start signal processing\n"pulses":0, - how many pulses have been received in the current signal\n"StackHighWaterMark":5528, - ESP32 Stack\n"freeMem":112880} - ESP32 memory available\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br"),t("span",{staticClass:"line-number"},[e._v("12")]),t("br"),t("span",{staticClass:"line-number"},[e._v("13")]),t("br"),t("span",{staticClass:"line-number"},[e._v("14")]),t("br"),t("span",{staticClass:"line-number"},[e._v("15")]),t("br"),t("span",{staticClass:"line-number"},[e._v("16")]),t("br"),t("span",{staticClass:"line-number"},[e._v("17")]),t("br"),t("span",{staticClass:"line-number"},[e._v("18")]),t("br")])]),t("h2",{attrs:{id:"rcswitch-based-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rcswitch-based-gateway"}},[e._v("#")]),e._v(" RCSwitch based gateway")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://github.com/1technophile/rc-switch.git",target:"_blank",rel:"noopener noreferrer"}},[e._v("RCSwitch"),t("OutboundLink")],1),e._v(" library is an Arduino library that facilitates communication with 433MHz RF modules. It is designed to be lightweight and easy to use, making it suitable for basic RF communication tasks. The library supports both sending and receiving of RF signals, allowing for integration with various RF devices such as remote controls, sensors, and switches.")]),e._v(" "),t("p",[e._v("To enable this module during compilation, add the flag "),t("code",[e._v("'-DZgatewayRF=\"RF\"'")]),e._v(" or uncomment the line "),t("code",[e._v('#define ZgatewayRF "RF"')]),e._v(" in the "),t("code",[e._v("User_config.h")]),e._v(" file.")]),e._v(" "),t("p",[e._v("Other useful definitions can be:")]),e._v(" "),t("ul",[t("li",[t("code",[e._v("#define RF_DISABLE_TRANSMIT")]),e._v(" To disable the transmit functions and free up the pin for other uses, add (or uncomment) this line to the "),t("code",[e._v("config_rf.h")]),e._v(" file.")]),e._v(" "),t("li",[t("code",[e._v("#define repeatRFwMQTT true")]),e._v(" To enable repeating the RF signal received by the gateway, set this parameter to true in the "),t("code",[e._v("config_rf.h")]),e._v(" file.")]),e._v(" "),t("li",[t("code",[e._v("#define RF_on_HAS_as_DeviceTrigger")]),e._v(" To send a Home Assistant Device Trigger Message for each RF signal received, add (or uncomment) this line in the "),t("code",[e._v("config_rf.h")]),e._v(" file. Note that this action also depends on the "),t("code",[e._v("ZmqttDiscovery")]),e._v(" settings.")]),e._v(" "),t("li",[t("code",[e._v("#define RF_on_HAS_as_MQTTSensor")]),e._v(" To send a Home Assistant MQTT sensor message for each RF signal received, add (or uncomment) this line in the "),t("code",[e._v("config_rf.h")]),e._v(" file. Note that this action also depends on the "),t("code",[e._v("ZmqttDiscovery")]),e._v(" settings.")])]),e._v(" "),t("h3",{attrs:{id:"handling-rf-signal-over-mqtt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#handling-rf-signal-over-mqtt"}},[e._v("#")]),e._v(" Handling RF signal over MQTT")]),e._v(" "),t("p",[e._v("In this chapter, the process of receiving and sending RF signals using MQTT will be explored. By subscribing to MQTT topics and publishing messages, RF devices can be seamlessly integrated with an MQTT broker.")]),e._v(" "),t("h4",{attrs:{id:"receiving-data-from-rf-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-rf-signal"}},[e._v("#")]),e._v(" Receiving Data from RF Signal")]),e._v(" "),t("p",[e._v("To receive data from an RF signal, follow these steps:")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Subscribe to all messages using mosquitto or open your MQTT client software:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" mosquitto_sub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" +/"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# -v")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])]),e._v(" "),t("li",[t("p",[e._v("Generate your RF signals by pressing a remote button or other RF device. You should see output similar to:")]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[e._v("home/OpenMQTTGateway/433toMQTT "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1315156")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"length"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("24")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"delay"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("317")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])]),e._v(" "),t("h4",{attrs:{id:"send-data-by-mqtt-to-convert-it-to-an-rf-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-to-an-rf-signal"}},[e._v("#")]),e._v(" Send data by MQTT to convert it to an RF signal")]),e._v(" "),t("p",[e._v("To send an RF signal using MQTT, you can publish a message to the topic "),t("code",[e._v("home/OpenMQTTGateway/commands/MQTTto433")]),e._v(" with the desired value. For example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'{\"value\":1315156}'")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("This command will send the RF code "),t("code",[e._v("1315156")]),e._v(" using the default parameters (protocol 1, delay 350).")]),e._v(" "),t("p",[e._v("When publishing data via MQTT, the Arduino IDE serial monitor will display the received value and the corresponding MQTT topic:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(410),alt:"Serial data"}})]),e._v(" "),t("p",[e._v("In this example, the Arduino receives the value "),t("code",[e._v("1315156")]),e._v(" on the MQTT topic "),t("code",[e._v("MQTTto433")]),e._v(" and transmits the data via RF.")]),e._v(" "),t("p",[e._v("Similarly, when receiving data via 433MHz, the Arduino IDE serial monitor will show the received data:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(411),alt:"Serial data 2"}})]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-with-advanced-rf-parameters"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-with-advanced-rf-parameters"}},[e._v("#")]),e._v(" Send data by MQTT with advanced RF parameters")]),e._v(" "),t("p",[e._v("RF sending supports three advanced parameters: bits length, RF protocol, and RF pulse length.")]),e._v(" "),t("ul",[t("li",[e._v("To use a different bits number, include "),t("code",[e._v('"length":24')]),e._v(" in your payload.")]),e._v(" "),t("li",[e._v("To use a different RCSwitch protocol, include "),t("code",[e._v('"protocol":2')]),e._v(" in your payload.")]),e._v(" "),t("li",[e._v("To use a different pulse length, include "),t("code",[e._v('"delay":315')]),e._v(" in your payload.")])]),e._v(" "),t("p",[e._v("Example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('\'{"value":1315156,"protocol":2,"length":24,"delay":315}\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("This command will make RCSwitch use protocol 2 with a pulse length of 315ms and a bits number of 24.")]),e._v(" "),t("h4",{attrs:{id:"repeat-the-rf-signal-several-time"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repeat-the-rf-signal-several-time"}},[e._v("#")]),e._v(" Repeat the RF signal several time")]),e._v(" "),t("p",[e._v('You can add a "repeat" key/value to the MQTTto433 JSON message to override the default number of repeats. Ensure that '),t("code",[e._v("repeatRFwMQTT")]),e._v(" is enabled at compile time.")]),e._v(" "),t("p",[e._v("Example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('\'{"value":1315156,"protocol":1,"length":24,"delay":317,"repeat":10}\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("h4",{attrs:{id:"set-transmit-and-receive-frequency-and-transmit-power-of-cc1101-transceiver"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-transmit-and-receive-frequency-and-transmit-power-of-cc1101-transceiver"}},[e._v("#")]),e._v(" Set Transmit and Receive Frequency and Transmit Power of CC1101 Transceiver")]),e._v(" "),t("p",[e._v("The default transmit frequency of the CC1101 module is 433.92 MHz. This can be changed by including the desired frequency in the transmit message. The parameter is "),t("code",[e._v("frequency")]),e._v(", and valid values are 300-348 MHz, 387-464 MHz, and 779-928 MHz. Actual frequency support will depend on your CC1101 board.")]),e._v(" "),t("p",[e._v("Example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('\'{"value":1150,"protocol":6,"length":12,"delay":450,"repeat":8,"frequency":303.732}\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("The default receive frequency of the CC1101 module is also 433.92 MHz. This can be changed by sending a message with the desired frequency. The parameter is "),t("code",[e._v("frequency")]),e._v(", and valid values are 300-348 MHz, 387-464 MHz, and 779-928 MHz. Actual frequency support will depend on your CC1101 board.")]),e._v(" "),t("p",[e._v("Example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTtoRF/config"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'{\"frequency\":433.92}'")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("Messages received will include the frequency, and when transmitting on a different frequency, the module will return to the receive frequency afterward. For example, transmit messages on 303.732 MHz and then receive messages on 433.92 MHz.")]),e._v(" "),t("p",[e._v("Example received message:")]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("4534142")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("6")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"length"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("26")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"delay"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("356")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"frequency"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("315.026")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("You can also adjust the transmit power (tx-power) in decibels (dB) for a transmission. The parameter is "),t("code",[e._v("cc1101_pa")]),e._v(", and valid values in decibels are -30, -20, -15, -10, -6, 0, 5, 7, 10, 11, and 12. The default is the maximum value. Adjusting the transmit power can help reduce range and minimize disturbances with other nearby devices.")]),e._v(" "),t("p",[e._v("Example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('\'{"value":1315156,"protocol":2,"length":24,"delay":315,"cc1101_pa":5}\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("h2",{attrs:{id:"pilight-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#pilight-gateway"}},[e._v("#")]),e._v(" Pilight gateway")]),e._v(" "),t("h3",{attrs:{id:"receiving-data-from-rf-signal-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-rf-signal-2"}},[e._v("#")]),e._v(" Receiving data from RF signal")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),e._v(" "),t("p",[t("code",[e._v("sudo mosquitto_sub -t +/# -v")])]),e._v(" "),t("p",[e._v("Generate your RF signals by pressing a remote button or other and you will see :")]),e._v(" "),t("p",[t("img",{attrs:{src:a(412),alt:"Digoo DG R8S data"}})]),e._v(" "),t("h4",{attrs:{id:"enabling-raw-packet-return-support"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-raw-packet-return-support"}},[e._v("#")]),e._v(" Enabling RAW packet return support")]),e._v(" "),t("p",[e._v("First, you need to compile a binary with "),t("code",[e._v("Pilight_rawEnabled true")]),e._v(" uncommented in config_RF.h.")]),e._v(" "),t("p",[e._v("Once the device is online and the active receiver is Pilght, you can toggle raw packet return.\nIf current active receiver is not Pilight the toggle command will be ignored and harmless error message will be published.")]),e._v(" "),t("p",[e._v("You can turn on the RAW packet return support with the following MQTT command:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols" -m \'{"rawEnabled":true}\'')])]),e._v(" "),t("p",[e._v("The returned JSON looks like this:\n"),t("code",[e._v('Client (null) received PUBLISH (d0, q0, r0, m0, \'home/OpenMQTTGateway/PilighttoMQTT\', ... (176 bytes)) {"format":"RAW","rawlen":106,"pulsesString":"c:0102010102020202020101010101010102020201020102020202020201010101010101010101010102010102010201020201010203;p:521,944,1924,3845@"}')])]),e._v(" "),t("p",[e._v("The pulseString format is Pilight's native. For those who are not familiar with it:\nc:* are the indexes for the p:* array, which are the different pulse length. (e.g. pulse[0] = 521ms, pulse[1]=944ms..., so c[0], which is a '0' = 521ms pulse, c[1], which is a '1' =944ms pulse etc)")]),e._v(" "),t("p",[e._v("After gathering all the packets you need, simply turn off the RAW packet support via MQTT:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols" -m \'{"rawEnabled":false}\'')])]),e._v(" "),t("h3",{attrs:{id:"limit-protocols"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#limit-protocols"}},[e._v("#")]),e._v(" Limit Protocols")]),e._v(" "),t("p",[e._v("It is possible to limit the protocols that Pilight will respond to, this can help reduce noise from unwanted devices and in some cases disable conflicting protocols.")]),e._v(" "),t("h4",{attrs:{id:"available-protocols"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#available-protocols"}},[e._v("#")]),e._v(" Available protocols")]),e._v(" "),t("p",[e._v("To list the available protocols on the Serial -")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols" -m \'{"available":true}\'')])]),e._v(" "),t("h4",{attrs:{id:"limit-protocols-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#limit-protocols-2"}},[e._v("#")]),e._v(" Limit protocols")]),e._v(" "),t("p",[e._v("To limit the protocols, send a JSON array of protocols as below -")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols -m \'{"limit": ["array", "of", "protocols"]}\'')])]),e._v(" "),t("p",[e._v("eg: "),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols" -m \'{"limit":["tfa", "ev1527"}\'')])]),e._v(" "),t("h4",{attrs:{id:"reset-protocols"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#reset-protocols"}},[e._v("#")]),e._v(" Reset protocols")]),e._v(" "),t("p",[e._v("To reset and listen to all protocols -\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols -m \'{"reset": true}\'')])]),e._v(" "),t("h4",{attrs:{id:"enabled-protocols"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabled-protocols"}},[e._v("#")]),e._v(" Enabled protocols")]),e._v(" "),t("p",[e._v("To list the enabled protocols on the Serial -")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols" -m \'{"enabled":true}\'')])]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-to-transmit-a-rf-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-transmit-a-rf-signal"}},[e._v("#")]),e._v(" Send data by MQTT to transmit a RF signal")]),e._v(" "),t("h4",{attrs:{id:"using-a-known-protocol"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-a-known-protocol"}},[e._v("#")]),e._v(" Using a known protocol")]),e._v(" "),t("p",[t("strong",[e._v("ON")]),e._v(" "),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight" -m \'{"message":"{\\"systemcode\\":12,\\"unitcode\\":22,\\"on\\":1}","protocol":"elro_400_switch"}\'')])]),e._v(" "),t("p",[t("strong",[e._v("OFF")]),e._v(" "),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight" -m \'{"message":"{\\"systemcode\\":12,\\"unitcode\\":22,\\"off\\":1}","protocol":"elro_400_switch"}\'')])]),e._v(" "),t("p",[e._v("These commands will transmit by RF the signals to actuate an elro_400 switch.")]),e._v(" "),t("p",[e._v("With a different frequency (CC1101 only):\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight" -m \'{"message":"{\\"systemcode\\":12,\\"unitcode\\":22,\\"off\\":1}","protocol":"elro_400_switch","frequency":315.026}\'')])]),e._v(" "),t("h4",{attrs:{id:"using-a-raw-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-a-raw-signal"}},[e._v("#")]),e._v(" Using a raw signal")]),e._v(" "),t("p",[e._v('You can transmit raw signal data by using the "raw" protocol. This uses the Pilight pulse train string format. One such example string, representing a transmission for Nexus protocol weather stations, looks like this: '),t("code",[e._v("c:03020202010102020102010101010101010202020201020102020202020101010201010202;p:500,1000,2000,4000;r:12@")]),e._v(". This string represents pulses and gaps directly.")]),e._v(" "),t("p",[e._v("Each number in the list after "),t("code",[e._v("p:")]),e._v(" that ends with "),t("code",[e._v(";")]),e._v(" stands for "),t("strong",[e._v("p")]),e._v("ulse and gap lengths in microseconds (µs). In this example, we have a list containing lengths of 500µs, 1000µs, 2000µs, and 4000µs.")]),e._v(" "),t("p",[e._v("Each number after "),t("code",[e._v("c:")]),e._v(" and ended by "),t("code",[e._v(";")]),e._v(" represents a "),t("strong",[e._v("c")]),e._v("ode that references the "),t("code",[e._v("p:")]),e._v(" list by index. In this example, the first 4 numbers after "),t("code",[e._v("c:")]),e._v(" are 0, 3, 0, and 2, which reference "),t("code",[e._v("p:")]),e._v("[0] = 500, "),t("code",[e._v("p:")]),e._v("[3] = 4000, "),t("code",[e._v("p:")]),e._v("[0] = 500, and "),t("code",[e._v("p:")]),e._v("[2] = 2000, respectively. In the language of digital radio transceiving, the most basic unit is usually a pulse and gap pair; in other words, 0s and 1s are represented by a pulse followed by a gap (lack of pulse) and the time lengths of these pulses and gaps. Different protocols have different pulse lengths and gap lengths representing 0, and a different one representing 1. Because of this pulse-gap nature, the codes in "),t("code",[e._v("c:")]),e._v(" must be taken as pairs; the first number in a pair represents the length of the pulse, and the second number the subsequent gap. In this example, the first pair, 03, represents a pulse of 500µs followed by a gap of 4000µs. The next pair, 02, represents a pulse of 500µs followed by a gap of 2000µs.")]),e._v(" "),t("p",[e._v("The number after "),t("code",[e._v("r:")]),e._v(" represents how many times the message in the string is to be "),t("strong",[e._v("r")]),e._v("epeated. The "),t("code",[e._v("r:")]),e._v(" block is optional. The default number of repeats if "),t("code",[e._v("r:")]),e._v(" is not specified is 10. Greater than about 100 repeats will cause a crash due to memory usage. If this example were written without specifying repeats, it would look like this: "),t("code",[e._v('{"raw":"c:03020202010102020102010101010101010202020201020102020202020101010201010202;p:500,1000,2000,4000@"}')])]),e._v(" "),t("p",[e._v("The entire string must end in a "),t("code",[e._v("@")]),e._v(". Each block must end in a "),t("code",[e._v(";")]),e._v(", but if it is the last block in the string, the "),t("code",[e._v("@")]),e._v(" replaces the "),t("code",[e._v(";")]),e._v(". Since the "),t("code",[e._v("r:")]),e._v(" block is optional, this last block could be either "),t("code",[e._v("p:")]),e._v(" or "),t("code",[e._v("r:")]),e._v(".")]),e._v(" "),t("p",[e._v("The JSON for the MQTT message to "),t("code",[e._v("home/OpenMQTTGateway/commands/MQTTtoPilight")]),e._v(' should specify the pulse train string as the value for the "raw" key: '),t("code",[e._v('{"raw":"c:03020202010102020102010101010101010202020201020102020202020101010201010202;p:500,1000,2000,4000;r:12@"}')]),e._v(".")]),e._v(" "),t("p",[e._v("e.g. "),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight" -m \'{"raw":"c:03020202010102020102010101010101010202020201020102020202020101010201010202;p:500,1000,2000,4000;r:12@"}\'')])]),e._v(" "),t("h2",{attrs:{id:"rf-with-sonoff-rf-bridge"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rf-with-sonoff-rf-bridge"}},[e._v("#")]),e._v(" RF with SONOFF RF BRIDGE")]),e._v(" "),t("h3",{attrs:{id:"receiving-data-from-rf-signal-3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-rf-signal-3"}},[e._v("#")]),e._v(" Receiving data from RF signal")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),e._v(" "),t("p",[t("code",[e._v("sudo mosquitto_sub -t +/# -v")])]),e._v(" "),t("p",[e._v("Generate your RF signals by pressing a remote button or other and you will see:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/SRFBtoMQTT {"raw":"2B660186042E00E7E5","value":"59365","delay":"1111","val_Thigh":"390","val_Tlow":"1070"}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("The first parameter is the raw value extracted from the RF module of the Sonoff bridge. The data are in hexadecimal and correspond to the details below:\nhttps://www.itead.cc/wiki/images/5/5e/RF_Universal_Transeceive_Module_Serial_Protocol_v1.0.pdf\nOpenMQTTGateway process the raw value to extract the other decimal values that can be reused to reproduce a signal (raw value can also be reused).")]),e._v(" "),t("p",[e._v("NOTE: currently the device doesn't receive correct values from Switches remote control")]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-to-convert-it-on-rf-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-rf-signal"}},[e._v("#")]),e._v(" Send data by MQTT to convert it on RF signal")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSRFB" -m \'{"value":1315156}\'')])]),e._v(" "),t("p",[e._v("This command will send by RF the code 1315156 and use the default parameters:\nRepeat = 1\nLow time= 320\nHigh time= 900\nSYNC = 9500")]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-with-advanced-rf-parameters-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-with-advanced-rf-parameters-2"}},[e._v("#")]),e._v(" Send data by MQTT with advanced RF parameters")]),e._v(" "),t("p",[e._v('RF bridge sending support four advanced parameters; Repeat, Low time, High time & Sync\nif you want to repeat your signal sending put into your json payload "repeat":2, 2 means 2 repetitions of signal')]),e._v(" "),t("p",[e._v('if you want to use a low time of 315 put inside your json payload "Tlow":315')]),e._v(" "),t("p",[e._v('if you want to use a high time of 845 put inside your json payload "Thigh":845')]),e._v(" "),t("p",[e._v('if you want to use a sync time of 9123 put inside your json payload "Tsyn":9123')]),e._v(" "),t("p",[e._v("Example:\n"),t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSRFB/Tlow_315/Thigh_845/Tsyn_9123 -m \'{"value":"33151562","delay":"9123","val_Thigh":"845","val_Tlow":"315"}\'')]),e._v("\nwill make RF Bridge send a signal with the use of listed parameters 315, 845, 9123...")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSRFB/Raw -m \'{"raw":"267A013603B6140551"}\'')]),e._v("\nwill make RF Bridge send a signal with the use of advanced parameters defined in the raw string")]),e._v(" "),t("h2",{attrs:{id:"rf2-gateway-kaku"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rf2-gateway-kaku"}},[e._v("#")]),e._v(" RF2 gateway KAKU")]),e._v(" "),t("p",[e._v("RF2 gateway enables to send command to RF devices with the KAKU protocol. DIO chacon devices are an example.\nIt uses the same pinout as the RF gateway and both gateways can be used on the same setup.")]),e._v(" "),t("p",[e._v("Receiving RF codes with the KAKU protocol is not compatible with ZgatewayRF , so as to get the code of your remotes you should comment ZgatewayRF in User_config.h.\nTransmitting can be done with both ZgatewayRF and ZgatewayRF2")]),e._v(" "),t("h3",{attrs:{id:"receiving-data-from-kaku-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-kaku-signal"}},[e._v("#")]),e._v(" Receiving data from KAKU signal")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),e._v(" "),t("p",[t("code",[e._v("sudo mosquitto_sub -t +/# -v")])]),e._v(" "),t("p",[e._v("Generate your RF signals by pressing a remote button or other and you will see :")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/RF2toMQTT {"unit":0,"groupBit":0,"period":273,"address":8233228,"switchType":0}')])]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-to-convert-it-on-kaku-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-kaku-signal"}},[e._v("#")]),e._v(" Send data by MQTT to convert it on KAKU signal")]),e._v(" "),t("p",[e._v("Once you get the infos publish the parameters with MQTT like that for off:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoRF2 -m "{"unit":0,"groupBit":0,"period":273,"address":8233228,"switchType":0}"')])]),e._v(" "),t("p",[e._v("for on:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoRF2 -m "{"unit":0,"groupBit":0,"period":273,"address":8233228,"switchType":1}"')])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{409:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial1.4ba30145.jpg"},410:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial2.2746e668.jpg"},411:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_Pilight_Digoo-DG-R8S.be97bb23.png"},464:function(e,t,a){"use strict";a.r(t);var s=a(14),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"rf-gateways-433mhz-315mhz-868mhz-915mhz"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rf-gateways-433mhz-315mhz-868mhz-915mhz"}},[e._v("#")]),e._v(" RF gateways (433mhz/315mhz/868mhz/915mhz)")]),e._v(" "),t("h2",{attrs:{id:"what-is-an-rf-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#what-is-an-rf-gateway"}},[e._v("#")]),e._v(" What is an RF gateway")]),e._v(" "),t("p",[e._v("An RF (Radio Frequency) gateway is a device that facilitates communication between RF devices and other communication protocols, such as MQTT in this context. Operating at specific frequencies like 433MHz, 315MHz, 868MHz, and 915MHz, these gateways can receive signals from various RF devices, decode them, and then forward the decoded data to systems like Home Assistant, OpenHAB, or any other MQTT-based system.")]),e._v(" "),t("p",[e._v("The primary advantage of using an RF gateway is its ability to bridge the gap between the world of RF devices, which might include sensors, remote controls, and other RF-based gadgets, and modern smart home systems or applications. This enables users to integrate a wide range of devices into their smart home setup, even if those devices were not originally designed for such integration.")]),e._v(" "),t("p",[e._v("In the context of the 433MHz MQTT gateway, the device not only decodes RF signals but also allows for seamless integration with MQTT systems. This means that signals from RF devices can be easily published to MQTT topics, and likewise, MQTT messages can be translated into RF signals for transmission. This two-way communication capability makes the gateway a powerful tool for expanding the capabilities of both RF devices and MQTT systems.")]),e._v(" "),t("p",[e._v("OpenMQTTGateway leverages several libraries for RF communication:")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Library")]),e._v(" "),t("th",[e._v("Description")]),e._v(" "),t("th",[e._v("Device Support")]),e._v(" "),t("th",[e._v("Resource Requirements")]),e._v(" "),t("th",[e._v("Flexibility")]),e._v(" "),t("th",[e._v("Integration Capabilities")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("RTL_433")]),e._v(" "),t("td",[e._v("Maintained and performant library supporting receiving 433Mhz but also other frequencies (does not support sending)")]),e._v(" "),t("td",[e._v("Wide range of devices")]),e._v(" "),t("td",[e._v("Moderate")]),e._v(" "),t("td",[e._v("Decodes various protocols")]),e._v(" "),t("td",[e._v("Can be integrated with systems supporting Home Assistant Auto Discovery")])]),e._v(" "),t("tr",[t("td",[e._v("RCSwitch")]),e._v(" "),t("td",[e._v("Arduino library for 433MHz module communication.")]),e._v(" "),t("td",[e._v("Basic devices")]),e._v(" "),t("td",[e._v("Lightweight")]),e._v(" "),t("td",[e._v("Basic encoding and decoding")]),e._v(" "),t("td",[e._v("Basic integration")])]),e._v(" "),t("tr",[t("td",[e._v("Pilight")]),e._v(" "),t("td",[e._v("Open-source solution for device control and data retrieval.")]),e._v(" "),t("td",[e._v("Broad range of devices and protocols")]),e._v(" "),t("td",[e._v("Moderate")]),e._v(" "),t("td",[e._v("Offers raw and protocol-specific data handling")]),e._v(" "),t("td",[e._v("Structured data")])]),e._v(" "),t("tr",[t("td",[e._v("RF2")]),e._v(" "),t("td",[e._v("Library focused on KaKu devices and protocol.")]),e._v(" "),t("td",[e._v("Specific devices and protocols")]),e._v(" "),t("td",[e._v("Lightweight")]),e._v(" "),t("td",[e._v("Decoding and encoding capabilities")]),e._v(" "),t("td",[e._v("Basic integration")])])])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("INFO")]),e._v(" "),t("p",[e._v("RTL_433 library can only receive data, RCSwitch, PiLight, RF2 can receive and transmit.")])]),e._v(" "),t("h2",{attrs:{id:"common-parameters-accross-modules"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#common-parameters-accross-modules"}},[e._v("#")]),e._v(" Common parameters accross modules")]),e._v(" "),t("h3",{attrs:{id:"change-default-frequency-sx127x-and-cc1101"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-default-frequency-sx127x-and-cc1101"}},[e._v("#")]),e._v(" Change default frequency (SX127X and CC1101)")]),e._v(" "),t("p",[e._v("The frequency can be can changed by sending an MQTT message or through the WebUI. Parameter is "),t("code",[e._v("frequency")]),e._v(" and valid values are 300-348 Mhz, 387-464Mhz and 779-928Mhz. Actual frequency support will depend on your board")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/commands/MQTTtoRF/config {"frequency":315.026}')])]),e._v(" "),t("p",[e._v("Note that with CC1101 this frequency will be used as the default sending frequency.")]),e._v(" "),t("h3",{attrs:{id:"changing-active-receiver-modules"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#changing-active-receiver-modules"}},[e._v("#")]),e._v(" Changing Active Receiver Modules")]),e._v(" "),t("p",[e._v("Switching of the active transceiver (RTL_433 receiver only) module is available between the RF, RF2, and (RTL_433 or Pilight) gateway modules, allowing for changing of signal decoders without redeploying the OpenMQTTGateway package. Sending a JSON message to the command topic will change the active transceiver module.")]),e._v(" "),t("p",[e._v('To change the RF gateway module, which will receive, send a json message to the RF gateway module command subject (home/OpenMQTTGateway/commands/MQTTtoRF/config) with the corresponding value of the key "active"')]),e._v(" "),t("p",[e._v("1 - PiLight"),t("br"),e._v("\n2 - RF"),t("br"),e._v("\n3 - RTL_433"),t("br"),e._v("\n4 - RF2")]),e._v(" "),t("p",[e._v("Example to receive from the RF gateway:\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoRF/config" -m \'{"active":2}\'')])]),e._v(" "),t("p",[e._v("Example to receive from the Pilight gateway:\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoRF/config" -m \'{"active":1}\'')])]),e._v(" "),t("p",[e._v("The active receiver can also be changed with the WebUI.")]),e._v(" "),t("p",[e._v("The OpenMQTTGateway RFtoMQTT status message contains a key "),t("code",[e._v("active")]),e._v(" which is the current active receiver module.\nThere is example configuration entry for Homea Assistant in the intergrations doc.")]),e._v(" "),t("h2",{attrs:{id:"rtl-433-device-decoders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rtl-433-device-decoders"}},[e._v("#")]),e._v(" RTL_433 device decoders")]),e._v(" "),t("p",[e._v("This feature is only available on a ESP32 based device with a supported transceiver connected due to the resource requirements of the rtl_433 device decoders. At the present time only Pulse Position Modulation (OOK_PPM), Pulse Width Modulation (OOK_PWM) and Pulse Manchester Zero Bit (OOK_PULSE_MANCHESTER_ZEROBIT) based decoders are available.")]),e._v(" "),t("h3",{attrs:{id:"supported-hardware-combinations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supported-hardware-combinations"}},[e._v("#")]),e._v(" Supported hardware combinations")]),e._v(" "),t("ul",[t("li",[e._v("ESP32 based device with a CC1101 transceiver")]),e._v(" "),t("li",[e._v("Heltec WiFi LoRa 32 (V2.1) and LilyGo LoRa 32 V2.1")]),e._v(" "),t("li",[e._v("ESP32 DOIT DevKit V1 and Ai-Thinker R01 (SX1278)")]),e._v(" "),t("li",[e._v("ESP32 + SX1278/SX1276")])]),e._v(" "),t("h3",{attrs:{id:"supported-decoders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supported-decoders"}},[e._v("#")]),e._v(" Supported Decoders")]),e._v(" "),t("p",[e._v("For the most recent support decoder list please check the "),t("a",{attrs:{href:"https://github.com/NorthernMan54/rtl_433_ESP?tab=readme-ov-file#ook-signal-device-decoders",target:"_blank",rel:"noopener noreferrer"}},[e._v("rtl_433_esp"),t("OutboundLink")],1),e._v(" repository.")]),e._v(" "),t("h3",{attrs:{id:"change-signal-rssi-threshold-delta"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-signal-rssi-threshold-delta"}},[e._v("#")]),e._v(" Change Signal RSSI Threshold Delta")]),e._v(" "),t("p",[e._v("Delta applied to RSSI floor noise level to determine start and end of signal, defaults to 9db.")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/commands/MQTTtoRF/config {"rssithreshold": 9}')])]),e._v(" "),t("h3",{attrs:{id:"retrieve-current-status-of-receiver"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#retrieve-current-status-of-receiver"}},[e._v("#")]),e._v(" Retrieve current status of receiver")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/commands/MQTTtoRF/config {"status":1}')])]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{"model":"status",\n"protocol":"debug",\n"debug":0, - rtl_433 verbose setting\n"duration":11799327, - duration of current signal\n"Gap length":-943575, - duration of gap between current signal\n"rssi":-38, - most recent received signal strength\n"train":1, - signal processing train #\n"messageCount":3, - total number of signals received\n"totalSignals":9, - RegOokFix signal quality count ( of 10 )\n"ignoredSignals":0, - RegOokFix signal quality ignored signals\n"unparsedSignals":3, - RegOokFix signal quality unparseable signals\n"_enabledReceiver":1, - which receiver is enabled\n"receiveMode":0, - is the receiver currently receiving a signal\n"currentRssi":-89, - current rssi level\n"rssiThreshold":-82, - minimum rssi level to start signal processing\n"pulses":0, - how many pulses have been received in the current signal\n"StackHighWaterMark":5528, - ESP32 Stack\n"freeMem":112880} - ESP32 memory available\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br"),t("span",{staticClass:"line-number"},[e._v("12")]),t("br"),t("span",{staticClass:"line-number"},[e._v("13")]),t("br"),t("span",{staticClass:"line-number"},[e._v("14")]),t("br"),t("span",{staticClass:"line-number"},[e._v("15")]),t("br"),t("span",{staticClass:"line-number"},[e._v("16")]),t("br"),t("span",{staticClass:"line-number"},[e._v("17")]),t("br"),t("span",{staticClass:"line-number"},[e._v("18")]),t("br")])]),t("h2",{attrs:{id:"rcswitch-based-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rcswitch-based-gateway"}},[e._v("#")]),e._v(" RCSwitch based gateway")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://github.com/1technophile/rc-switch.git",target:"_blank",rel:"noopener noreferrer"}},[e._v("RCSwitch"),t("OutboundLink")],1),e._v(" library is an Arduino library that facilitates communication with 433MHz RF modules. It is designed to be lightweight and easy to use, making it suitable for basic RF communication tasks. The library supports both sending and receiving of RF signals, allowing for integration with various RF devices such as remote controls, sensors, and switches.")]),e._v(" "),t("p",[e._v("To enable this module during compilation, add the flag "),t("code",[e._v("'-DZgatewayRF=\"RF\"'")]),e._v(" or uncomment the line "),t("code",[e._v('#define ZgatewayRF "RF"')]),e._v(" in the "),t("code",[e._v("User_config.h")]),e._v(" file.")]),e._v(" "),t("p",[e._v("Other useful definitions can be:")]),e._v(" "),t("ul",[t("li",[t("code",[e._v("#define RF_DISABLE_TRANSMIT")]),e._v(" To disable the transmit functions and free up the pin for other uses, add (or uncomment) this line to the "),t("code",[e._v("config_rf.h")]),e._v(" file.")]),e._v(" "),t("li",[t("code",[e._v("#define repeatRFwMQTT true")]),e._v(" To enable repeating the RF signal received by the gateway, set this parameter to true in the "),t("code",[e._v("config_rf.h")]),e._v(" file.")]),e._v(" "),t("li",[t("code",[e._v("#define RF_on_HAS_as_DeviceTrigger")]),e._v(" To send a Home Assistant Device Trigger Message for each RF signal received, add (or uncomment) this line in the "),t("code",[e._v("config_rf.h")]),e._v(" file. Note that this action also depends on the "),t("code",[e._v("ZmqttDiscovery")]),e._v(" settings.")]),e._v(" "),t("li",[t("code",[e._v("#define RF_on_HAS_as_MQTTSensor")]),e._v(" To send a Home Assistant MQTT sensor message for each RF signal received, add (or uncomment) this line in the "),t("code",[e._v("config_rf.h")]),e._v(" file. Note that this action also depends on the "),t("code",[e._v("ZmqttDiscovery")]),e._v(" settings.")])]),e._v(" "),t("h3",{attrs:{id:"handling-rf-signal-over-mqtt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#handling-rf-signal-over-mqtt"}},[e._v("#")]),e._v(" Handling RF signal over MQTT")]),e._v(" "),t("p",[e._v("In this chapter, the process of receiving and sending RF signals using MQTT will be explored. By subscribing to MQTT topics and publishing messages, RF devices can be seamlessly integrated with an MQTT broker.")]),e._v(" "),t("h4",{attrs:{id:"receiving-data-from-rf-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-rf-signal"}},[e._v("#")]),e._v(" Receiving Data from RF Signal")]),e._v(" "),t("p",[e._v("To receive data from an RF signal, follow these steps:")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Subscribe to all messages using mosquitto or open your MQTT client software:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" mosquitto_sub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" +/"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# -v")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])]),e._v(" "),t("li",[t("p",[e._v("Generate your RF signals by pressing a remote button or other RF device. You should see output similar to:")]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[e._v("home/OpenMQTTGateway/433toMQTT "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1315156")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"length"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("24")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"delay"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("317")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])]),e._v(" "),t("h4",{attrs:{id:"send-data-by-mqtt-to-convert-it-to-an-rf-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-to-an-rf-signal"}},[e._v("#")]),e._v(" Send data by MQTT to convert it to an RF signal")]),e._v(" "),t("p",[e._v("To send an RF signal using MQTT, you can publish a message to the topic "),t("code",[e._v("home/OpenMQTTGateway/commands/MQTTto433")]),e._v(" with the desired value. For example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'{\"value\":1315156}'")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("This command will send the RF code "),t("code",[e._v("1315156")]),e._v(" using the default parameters (protocol 1, delay 350).")]),e._v(" "),t("p",[e._v("When publishing data via MQTT, the Arduino IDE serial monitor will display the received value and the corresponding MQTT topic:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(409),alt:"Serial data"}})]),e._v(" "),t("p",[e._v("In this example, the Arduino receives the value "),t("code",[e._v("1315156")]),e._v(" on the MQTT topic "),t("code",[e._v("MQTTto433")]),e._v(" and transmits the data via RF.")]),e._v(" "),t("p",[e._v("Similarly, when receiving data via 433MHz, the Arduino IDE serial monitor will show the received data:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(410),alt:"Serial data 2"}})]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-with-advanced-rf-parameters"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-with-advanced-rf-parameters"}},[e._v("#")]),e._v(" Send data by MQTT with advanced RF parameters")]),e._v(" "),t("p",[e._v("RF sending supports three advanced parameters: bits length, RF protocol, and RF pulse length.")]),e._v(" "),t("ul",[t("li",[e._v("To use a different bits number, include "),t("code",[e._v('"length":24')]),e._v(" in your payload.")]),e._v(" "),t("li",[e._v("To use a different RCSwitch protocol, include "),t("code",[e._v('"protocol":2')]),e._v(" in your payload.")]),e._v(" "),t("li",[e._v("To use a different pulse length, include "),t("code",[e._v('"delay":315')]),e._v(" in your payload.")])]),e._v(" "),t("p",[e._v("Example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('\'{"value":1315156,"protocol":2,"length":24,"delay":315}\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("This command will make RCSwitch use protocol 2 with a pulse length of 315ms and a bits number of 24.")]),e._v(" "),t("h4",{attrs:{id:"repeat-the-rf-signal-several-time"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repeat-the-rf-signal-several-time"}},[e._v("#")]),e._v(" Repeat the RF signal several time")]),e._v(" "),t("p",[e._v('You can add a "repeat" key/value to the MQTTto433 JSON message to override the default number of repeats. Ensure that '),t("code",[e._v("repeatRFwMQTT")]),e._v(" is enabled at compile time.")]),e._v(" "),t("p",[e._v("Example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('\'{"value":1315156,"protocol":1,"length":24,"delay":317,"repeat":10}\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("h4",{attrs:{id:"set-transmit-and-receive-frequency-and-transmit-power-of-cc1101-transceiver"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-transmit-and-receive-frequency-and-transmit-power-of-cc1101-transceiver"}},[e._v("#")]),e._v(" Set Transmit and Receive Frequency and Transmit Power of CC1101 Transceiver")]),e._v(" "),t("p",[e._v("The default transmit frequency of the CC1101 module is 433.92 MHz. This can be changed by including the desired frequency in the transmit message. The parameter is "),t("code",[e._v("frequency")]),e._v(", and valid values are 300-348 MHz, 387-464 MHz, and 779-928 MHz. Actual frequency support will depend on your CC1101 board.")]),e._v(" "),t("p",[e._v("Example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('\'{"value":1150,"protocol":6,"length":12,"delay":450,"repeat":8,"frequency":303.732}\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("The default receive frequency of the CC1101 module is also 433.92 MHz. This can be changed by sending a message with the desired frequency. The parameter is "),t("code",[e._v("frequency")]),e._v(", and valid values are 300-348 MHz, 387-464 MHz, and 779-928 MHz. Actual frequency support will depend on your CC1101 board.")]),e._v(" "),t("p",[e._v("Example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTtoRF/config"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'{\"frequency\":433.92}'")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("Messages received will include the frequency, and when transmitting on a different frequency, the module will return to the receive frequency afterward. For example, transmit messages on 303.732 MHz and then receive messages on 433.92 MHz.")]),e._v(" "),t("p",[e._v("Example received message:")]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("4534142")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("6")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"length"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("26")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"delay"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("356")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"frequency"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("315.026")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("You can also adjust the transmit power (tx-power) in decibels (dB) for a transmission. The parameter is "),t("code",[e._v("cc1101_pa")]),e._v(", and valid values in decibels are -30, -20, -15, -10, -6, 0, 5, 7, 10, 11, and 12. The default is the maximum value. Adjusting the transmit power can help reduce range and minimize disturbances with other nearby devices.")]),e._v(" "),t("p",[e._v("Example:")]),e._v(" "),t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("mosquitto_pub "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"home/OpenMQTTGateway/commands/MQTTto433"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-m")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('\'{"value":1315156,"protocol":2,"length":24,"delay":315,"cc1101_pa":5}\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("h2",{attrs:{id:"pilight-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#pilight-gateway"}},[e._v("#")]),e._v(" Pilight gateway")]),e._v(" "),t("h3",{attrs:{id:"receiving-data-from-rf-signal-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-rf-signal-2"}},[e._v("#")]),e._v(" Receiving data from RF signal")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),e._v(" "),t("p",[t("code",[e._v("sudo mosquitto_sub -t +/# -v")])]),e._v(" "),t("p",[e._v("Generate your RF signals by pressing a remote button or other and you will see :")]),e._v(" "),t("p",[t("img",{attrs:{src:a(411),alt:"Digoo DG R8S data"}})]),e._v(" "),t("h4",{attrs:{id:"enabling-raw-packet-return-support"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-raw-packet-return-support"}},[e._v("#")]),e._v(" Enabling RAW packet return support")]),e._v(" "),t("p",[e._v("First, you need to compile a binary with "),t("code",[e._v("Pilight_rawEnabled true")]),e._v(" uncommented in config_RF.h.")]),e._v(" "),t("p",[e._v("Once the device is online and the active receiver is Pilght, you can toggle raw packet return.\nIf current active receiver is not Pilight the toggle command will be ignored and harmless error message will be published.")]),e._v(" "),t("p",[e._v("You can turn on the RAW packet return support with the following MQTT command:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols" -m \'{"rawEnabled":true}\'')])]),e._v(" "),t("p",[e._v("The returned JSON looks like this:\n"),t("code",[e._v('Client (null) received PUBLISH (d0, q0, r0, m0, \'home/OpenMQTTGateway/PilighttoMQTT\', ... (176 bytes)) {"format":"RAW","rawlen":106,"pulsesString":"c:0102010102020202020101010101010102020201020102020202020201010101010101010101010102010102010201020201010203;p:521,944,1924,3845@"}')])]),e._v(" "),t("p",[e._v("The pulseString format is Pilight's native. For those who are not familiar with it:\nc:* are the indexes for the p:* array, which are the different pulse length. (e.g. pulse[0] = 521ms, pulse[1]=944ms..., so c[0], which is a '0' = 521ms pulse, c[1], which is a '1' =944ms pulse etc)")]),e._v(" "),t("p",[e._v("After gathering all the packets you need, simply turn off the RAW packet support via MQTT:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols" -m \'{"rawEnabled":false}\'')])]),e._v(" "),t("h3",{attrs:{id:"limit-protocols"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#limit-protocols"}},[e._v("#")]),e._v(" Limit Protocols")]),e._v(" "),t("p",[e._v("It is possible to limit the protocols that Pilight will respond to, this can help reduce noise from unwanted devices and in some cases disable conflicting protocols.")]),e._v(" "),t("h4",{attrs:{id:"available-protocols"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#available-protocols"}},[e._v("#")]),e._v(" Available protocols")]),e._v(" "),t("p",[e._v("To list the available protocols on the Serial -")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols" -m \'{"available":true}\'')])]),e._v(" "),t("h4",{attrs:{id:"limit-protocols-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#limit-protocols-2"}},[e._v("#")]),e._v(" Limit protocols")]),e._v(" "),t("p",[e._v("To limit the protocols, send a JSON array of protocols as below -")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols -m \'{"limit": ["array", "of", "protocols"]}\'')])]),e._v(" "),t("p",[e._v("eg: "),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols" -m \'{"limit":["tfa", "ev1527"}\'')])]),e._v(" "),t("h4",{attrs:{id:"reset-protocols"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#reset-protocols"}},[e._v("#")]),e._v(" Reset protocols")]),e._v(" "),t("p",[e._v("To reset and listen to all protocols -\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols -m \'{"reset": true}\'')])]),e._v(" "),t("h4",{attrs:{id:"enabled-protocols"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabled-protocols"}},[e._v("#")]),e._v(" Enabled protocols")]),e._v(" "),t("p",[e._v("To list the enabled protocols on the Serial -")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight/protocols" -m \'{"enabled":true}\'')])]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-to-transmit-a-rf-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-transmit-a-rf-signal"}},[e._v("#")]),e._v(" Send data by MQTT to transmit a RF signal")]),e._v(" "),t("h4",{attrs:{id:"using-a-known-protocol"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-a-known-protocol"}},[e._v("#")]),e._v(" Using a known protocol")]),e._v(" "),t("p",[t("strong",[e._v("ON")]),e._v(" "),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight" -m \'{"message":"{\\"systemcode\\":12,\\"unitcode\\":22,\\"on\\":1}","protocol":"elro_400_switch"}\'')])]),e._v(" "),t("p",[t("strong",[e._v("OFF")]),e._v(" "),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight" -m \'{"message":"{\\"systemcode\\":12,\\"unitcode\\":22,\\"off\\":1}","protocol":"elro_400_switch"}\'')])]),e._v(" "),t("p",[e._v("These commands will transmit by RF the signals to actuate an elro_400 switch.")]),e._v(" "),t("p",[e._v("With a different frequency (CC1101 only):\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight" -m \'{"message":"{\\"systemcode\\":12,\\"unitcode\\":22,\\"off\\":1}","protocol":"elro_400_switch","frequency":315.026}\'')])]),e._v(" "),t("h4",{attrs:{id:"using-a-raw-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-a-raw-signal"}},[e._v("#")]),e._v(" Using a raw signal")]),e._v(" "),t("p",[e._v('You can transmit raw signal data by using the "raw" protocol. This uses the Pilight pulse train string format. One such example string, representing a transmission for Nexus protocol weather stations, looks like this: '),t("code",[e._v("c:03020202010102020102010101010101010202020201020102020202020101010201010202;p:500,1000,2000,4000;r:12@")]),e._v(". This string represents pulses and gaps directly.")]),e._v(" "),t("p",[e._v("Each number in the list after "),t("code",[e._v("p:")]),e._v(" that ends with "),t("code",[e._v(";")]),e._v(" stands for "),t("strong",[e._v("p")]),e._v("ulse and gap lengths in microseconds (µs). In this example, we have a list containing lengths of 500µs, 1000µs, 2000µs, and 4000µs.")]),e._v(" "),t("p",[e._v("Each number after "),t("code",[e._v("c:")]),e._v(" and ended by "),t("code",[e._v(";")]),e._v(" represents a "),t("strong",[e._v("c")]),e._v("ode that references the "),t("code",[e._v("p:")]),e._v(" list by index. In this example, the first 4 numbers after "),t("code",[e._v("c:")]),e._v(" are 0, 3, 0, and 2, which reference "),t("code",[e._v("p:")]),e._v("[0] = 500, "),t("code",[e._v("p:")]),e._v("[3] = 4000, "),t("code",[e._v("p:")]),e._v("[0] = 500, and "),t("code",[e._v("p:")]),e._v("[2] = 2000, respectively. In the language of digital radio transceiving, the most basic unit is usually a pulse and gap pair; in other words, 0s and 1s are represented by a pulse followed by a gap (lack of pulse) and the time lengths of these pulses and gaps. Different protocols have different pulse lengths and gap lengths representing 0, and a different one representing 1. Because of this pulse-gap nature, the codes in "),t("code",[e._v("c:")]),e._v(" must be taken as pairs; the first number in a pair represents the length of the pulse, and the second number the subsequent gap. In this example, the first pair, 03, represents a pulse of 500µs followed by a gap of 4000µs. The next pair, 02, represents a pulse of 500µs followed by a gap of 2000µs.")]),e._v(" "),t("p",[e._v("The number after "),t("code",[e._v("r:")]),e._v(" represents how many times the message in the string is to be "),t("strong",[e._v("r")]),e._v("epeated. The "),t("code",[e._v("r:")]),e._v(" block is optional. The default number of repeats if "),t("code",[e._v("r:")]),e._v(" is not specified is 10. Greater than about 100 repeats will cause a crash due to memory usage. If this example were written without specifying repeats, it would look like this: "),t("code",[e._v('{"raw":"c:03020202010102020102010101010101010202020201020102020202020101010201010202;p:500,1000,2000,4000@"}')])]),e._v(" "),t("p",[e._v("The entire string must end in a "),t("code",[e._v("@")]),e._v(". Each block must end in a "),t("code",[e._v(";")]),e._v(", but if it is the last block in the string, the "),t("code",[e._v("@")]),e._v(" replaces the "),t("code",[e._v(";")]),e._v(". Since the "),t("code",[e._v("r:")]),e._v(" block is optional, this last block could be either "),t("code",[e._v("p:")]),e._v(" or "),t("code",[e._v("r:")]),e._v(".")]),e._v(" "),t("p",[e._v("The JSON for the MQTT message to "),t("code",[e._v("home/OpenMQTTGateway/commands/MQTTtoPilight")]),e._v(' should specify the pulse train string as the value for the "raw" key: '),t("code",[e._v('{"raw":"c:03020202010102020102010101010101010202020201020102020202020101010201010202;p:500,1000,2000,4000;r:12@"}')]),e._v(".")]),e._v(" "),t("p",[e._v("e.g. "),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight" -m \'{"raw":"c:03020202010102020102010101010101010202020201020102020202020101010201010202;p:500,1000,2000,4000;r:12@"}\'')])]),e._v(" "),t("h2",{attrs:{id:"rf-with-sonoff-rf-bridge"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rf-with-sonoff-rf-bridge"}},[e._v("#")]),e._v(" RF with SONOFF RF BRIDGE")]),e._v(" "),t("h3",{attrs:{id:"receiving-data-from-rf-signal-3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-rf-signal-3"}},[e._v("#")]),e._v(" Receiving data from RF signal")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),e._v(" "),t("p",[t("code",[e._v("sudo mosquitto_sub -t +/# -v")])]),e._v(" "),t("p",[e._v("Generate your RF signals by pressing a remote button or other and you will see:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/SRFBtoMQTT {"raw":"2B660186042E00E7E5","value":"59365","delay":"1111","val_Thigh":"390","val_Tlow":"1070"}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("The first parameter is the raw value extracted from the RF module of the Sonoff bridge. The data are in hexadecimal and correspond to the details below:\nhttps://www.itead.cc/wiki/images/5/5e/RF_Universal_Transeceive_Module_Serial_Protocol_v1.0.pdf\nOpenMQTTGateway process the raw value to extract the other decimal values that can be reused to reproduce a signal (raw value can also be reused).")]),e._v(" "),t("p",[e._v("NOTE: currently the device doesn't receive correct values from Switches remote control")]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-to-convert-it-on-rf-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-rf-signal"}},[e._v("#")]),e._v(" Send data by MQTT to convert it on RF signal")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSRFB" -m \'{"value":1315156}\'')])]),e._v(" "),t("p",[e._v("This command will send by RF the code 1315156 and use the default parameters:\nRepeat = 1\nLow time= 320\nHigh time= 900\nSYNC = 9500")]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-with-advanced-rf-parameters-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-with-advanced-rf-parameters-2"}},[e._v("#")]),e._v(" Send data by MQTT with advanced RF parameters")]),e._v(" "),t("p",[e._v('RF bridge sending support four advanced parameters; Repeat, Low time, High time & Sync\nif you want to repeat your signal sending put into your json payload "repeat":2, 2 means 2 repetitions of signal')]),e._v(" "),t("p",[e._v('if you want to use a low time of 315 put inside your json payload "Tlow":315')]),e._v(" "),t("p",[e._v('if you want to use a high time of 845 put inside your json payload "Thigh":845')]),e._v(" "),t("p",[e._v('if you want to use a sync time of 9123 put inside your json payload "Tsyn":9123')]),e._v(" "),t("p",[e._v("Example:\n"),t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSRFB/Tlow_315/Thigh_845/Tsyn_9123 -m \'{"value":"33151562","delay":"9123","val_Thigh":"845","val_Tlow":"315"}\'')]),e._v("\nwill make RF Bridge send a signal with the use of listed parameters 315, 845, 9123...")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSRFB/Raw -m \'{"raw":"267A013603B6140551"}\'')]),e._v("\nwill make RF Bridge send a signal with the use of advanced parameters defined in the raw string")]),e._v(" "),t("h2",{attrs:{id:"rf2-gateway-kaku"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rf2-gateway-kaku"}},[e._v("#")]),e._v(" RF2 gateway KAKU")]),e._v(" "),t("p",[e._v("RF2 gateway enables to send command to RF devices with the KAKU protocol. DIO chacon devices are an example.\nIt uses the same pinout as the RF gateway and both gateways can be used on the same setup.")]),e._v(" "),t("p",[e._v("Receiving RF codes with the KAKU protocol is not compatible with ZgatewayRF , so as to get the code of your remotes you should comment ZgatewayRF in User_config.h.\nTransmitting can be done with both ZgatewayRF and ZgatewayRF2")]),e._v(" "),t("h3",{attrs:{id:"receiving-data-from-kaku-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-kaku-signal"}},[e._v("#")]),e._v(" Receiving data from KAKU signal")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),e._v(" "),t("p",[t("code",[e._v("sudo mosquitto_sub -t +/# -v")])]),e._v(" "),t("p",[e._v("Generate your RF signals by pressing a remote button or other and you will see :")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/RF2toMQTT {"unit":0,"groupBit":0,"period":273,"address":8233228,"switchType":0}')])]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-to-convert-it-on-kaku-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-kaku-signal"}},[e._v("#")]),e._v(" Send data by MQTT to convert it on KAKU signal")]),e._v(" "),t("p",[e._v("Once you get the infos publish the parameters with MQTT like that for off:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoRF2 -m "{"unit":0,"groupBit":0,"period":273,"address":8233228,"switchType":0}"')])]),e._v(" "),t("p",[e._v("for on:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoRF2 -m "{"unit":0,"groupBit":0,"period":273,"address":8233228,"switchType":1}"')])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/37.83508dbe.js b/dev/assets/js/37.8a3f6ff9.js similarity index 99% rename from dev/assets/js/37.83508dbe.js rename to dev/assets/js/37.8a3f6ff9.js index 528e80eb..fbb6a7bc 100644 --- a/dev/assets/js/37.83508dbe.js +++ b/dev/assets/js/37.8a3f6ff9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{276:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-Configuration-Home-Assistant.531a7826.png"},277:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_Home_Assistant_MQTT_discovery.8980f020.png"},451:function(e,t,a){"use strict";a.r(t);var s=a(14),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"advanced-configuration-of-the-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-configuration-of-the-gateway"}},[e._v("#")]),e._v(" Advanced configuration of the gateway")]),e._v(" "),t("h2",{attrs:{id:"secure-connection-to-the-broker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#secure-connection-to-the-broker"}},[e._v("#")]),e._v(" Secure connection to the broker")]),e._v(" "),t("p",[e._v("By default the connection between the gateway and the MQTT broker is not encrypted and the identity of the broker is not verified.\nFor connections in a private local area network this might not be a big issue, but if you connect to a broker on the internet or the gateway is connected to a public network there is a high security risk.")]),e._v(" "),t("p",[e._v("To secure the connection, Transport Layer Security (TLS) can be used which is supported by most MQTT brokers.\nSetting up and configuring TLS in the MQTT broker is a complex process and perhaps include creating a self-signed certificate.\nThe configuration of the broker is not covered here, you should look into the documentation of your broker.")]),e._v(" "),t("h3",{attrs:{id:"prerequisites"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[e._v("#")]),e._v(" Prerequisites")]),e._v(" "),t("p",[e._v("The MQTT broker is configured for TLS and you have access to the CA certificate which was used to sign the MQTT broker certificate.\nYou are using ESP8266 or ESP32.")]),e._v(" "),t("h3",{attrs:{id:"configure-secure-connection-in-the-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configure-secure-connection-in-the-gateway"}},[e._v("#")]),e._v(" Configure secure connection in the gateway")]),e._v(" "),t("p",[e._v("To enable the secure connection and use TLS set the "),t("code",[e._v("#define MQTT_DEFAULT_SECURE")]),e._v(" to true at build time, or the "),t("code",[e._v("mqtt secure")]),e._v(" parameter with WiFi Manager or "),t("code",[e._v("mqtt_secure")]),e._v(" with MQTT.\nSet "),t("code",[e._v("MQTT_SERVER")]),e._v(" to the Common Name (CN) of the certificate of the broker.")]),e._v(" "),t("p",[e._v("The server identity can be verified against a certificate or not, if you don't want to use a certicate to verify the server you can uncheck the option "),t("code",[e._v("validate cert")]),e._v(" with WiFi Manager or set "),t("code",[e._v("mqtt_validate")]),e._v(" to "),t("code",[e._v("false")]),e._v(" with MQTT")]),e._v(" "),t("p",[e._v("The CA certificate should be in PEM ascii format.\nIf your CA certificate is not in the correct format or you don't know the format, use "),t("code",[e._v("openssl")]),e._v(" to convert the certificate to the correct format.\nAt build time, in "),t("code",[e._v("main/certs/default_server_cert.h")]),e._v(" replace the "),t("code",[e._v("...")]),e._v(" with the content of your certificate which is between the "),t("code",[e._v("-----BEGIN CERTIFICATE-----")]),e._v(" and "),t("code",[e._v("-----END CERTIFICATE-----")]),e._v(" lines:")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("const")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("char")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("*")]),e._v(" certificate CERT_ATTRIBUTE "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token raw-string string"}},[e._v('R"EOF("\n-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n")EOF"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("With WiFi Manager copy your certificate from "),t("code",[e._v("-----BEGIN CERTIFICATE-----")]),e._v(" to "),t("code",[e._v("-----END CERTIFICATE-----")]),e._v(" (included) and paste it into the input field:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br")])]),t("p",[e._v("This process can also be used for the other certificates, OTA, client key, client certificate if necessary.")]),e._v(" "),t("h2",{attrs:{id:"add-the-received-value-at-the-end-of-the-topic"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-the-received-value-at-the-end-of-the-topic"}},[e._v("#")]),e._v(' Add the received "value" at the end of the topic')]),e._v(" "),t("p",[e._v('For the gateways that publish a "value" parameter on the json (RF, IR...), it is possible to concatenate this parameter at the end of the topic.\nSo as to activate this function you need to set '),t("code",[e._v("valueAsATopic")]),e._v(" to true in User_config.h")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("ifndef")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[e._v("valueAsATopic")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("define")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token macro-name"}},[e._v("valueAsATopic")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("false")]),e._v(" ")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("// define true to integrate msg value into the subject when receiving")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("endif")])]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br")])]),t("p",[e._v("Per default you see the following data:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/SRFBtoMQTT {"raw":"2B660186042E00E7E5","value":"59365","delay":"1111","val_Thigh":"390","val_Tlow":"1070"}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("With the line uncommented you will see:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/SRFBtoMQTT/59365 {"raw":"2B660186042E00E7E5","value":"59365","delay":"1111","val_Thigh":"390","val_Tlow":"1070"}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("It can be useful to avoid warning or errors on certain controllers.")]),e._v(" "),t("h2",{attrs:{id:"auto-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#auto-discovery"}},[e._v("#")]),e._v(" Auto discovery")]),e._v(" "),t("p",[e._v("Home Assistant discovery is enabled by default on all binaries and platformio configurations.")]),e._v(" "),t("p",[e._v("To have a working discovery setup you need to enable it on your MQTT integration definition in HASS.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("With platformio you can deactivate discovery by adding:")]),e._v(" "),t("div",{staticClass:"language-ini line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ini"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-UZmqttDiscovery")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"HADiscovery"\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("To your environment definition.")])]),e._v(" "),t("p",[e._v("So as to create the MQTT username and password, you have to create a new user(recommended) into Home Assistant->Configuration->Users (available in admin mode) or use an existing username/pwd combination (not recommended). This user doesn't need to be an administrator.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(276),alt:"MQTT User"}})]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("The max size of the username is 30 and 60 for the password.")])]),e._v(" "),t("p",[e._v("OMG will use the auto discovery functionality of home assistant to create sensors and gateways into your HASS instance automatically.")]),e._v(" "),t("p",[e._v("The gateway device will be available into Configuration->Devices section of Home Assistant.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(277),alt:"MQTT Device settings"}})])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{276:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-Configuration-Home-Assistant.531a7826.png"},277:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_Home_Assistant_MQTT_discovery.8980f020.png"},450:function(e,t,a){"use strict";a.r(t);var s=a(14),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"advanced-configuration-of-the-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-configuration-of-the-gateway"}},[e._v("#")]),e._v(" Advanced configuration of the gateway")]),e._v(" "),t("h2",{attrs:{id:"secure-connection-to-the-broker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#secure-connection-to-the-broker"}},[e._v("#")]),e._v(" Secure connection to the broker")]),e._v(" "),t("p",[e._v("By default the connection between the gateway and the MQTT broker is not encrypted and the identity of the broker is not verified.\nFor connections in a private local area network this might not be a big issue, but if you connect to a broker on the internet or the gateway is connected to a public network there is a high security risk.")]),e._v(" "),t("p",[e._v("To secure the connection, Transport Layer Security (TLS) can be used which is supported by most MQTT brokers.\nSetting up and configuring TLS in the MQTT broker is a complex process and perhaps include creating a self-signed certificate.\nThe configuration of the broker is not covered here, you should look into the documentation of your broker.")]),e._v(" "),t("h3",{attrs:{id:"prerequisites"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[e._v("#")]),e._v(" Prerequisites")]),e._v(" "),t("p",[e._v("The MQTT broker is configured for TLS and you have access to the CA certificate which was used to sign the MQTT broker certificate.\nYou are using ESP8266 or ESP32.")]),e._v(" "),t("h3",{attrs:{id:"configure-secure-connection-in-the-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configure-secure-connection-in-the-gateway"}},[e._v("#")]),e._v(" Configure secure connection in the gateway")]),e._v(" "),t("p",[e._v("To enable the secure connection and use TLS set the "),t("code",[e._v("#define MQTT_DEFAULT_SECURE")]),e._v(" to true at build time, or the "),t("code",[e._v("mqtt secure")]),e._v(" parameter with WiFi Manager or "),t("code",[e._v("mqtt_secure")]),e._v(" with MQTT.\nSet "),t("code",[e._v("MQTT_SERVER")]),e._v(" to the Common Name (CN) of the certificate of the broker.")]),e._v(" "),t("p",[e._v("The server identity can be verified against a certificate or not, if you don't want to use a certicate to verify the server you can uncheck the option "),t("code",[e._v("validate cert")]),e._v(" with WiFi Manager or set "),t("code",[e._v("mqtt_validate")]),e._v(" to "),t("code",[e._v("false")]),e._v(" with MQTT")]),e._v(" "),t("p",[e._v("The CA certificate should be in PEM ascii format.\nIf your CA certificate is not in the correct format or you don't know the format, use "),t("code",[e._v("openssl")]),e._v(" to convert the certificate to the correct format.\nAt build time, in "),t("code",[e._v("main/certs/default_server_cert.h")]),e._v(" replace the "),t("code",[e._v("...")]),e._v(" with the content of your certificate which is between the "),t("code",[e._v("-----BEGIN CERTIFICATE-----")]),e._v(" and "),t("code",[e._v("-----END CERTIFICATE-----")]),e._v(" lines:")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("const")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("char")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("*")]),e._v(" certificate CERT_ATTRIBUTE "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token raw-string string"}},[e._v('R"EOF("\n-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n")EOF"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("With WiFi Manager copy your certificate from "),t("code",[e._v("-----BEGIN CERTIFICATE-----")]),e._v(" to "),t("code",[e._v("-----END CERTIFICATE-----")]),e._v(" (included) and paste it into the input field:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br")])]),t("p",[e._v("This process can also be used for the other certificates, OTA, client key, client certificate if necessary.")]),e._v(" "),t("h2",{attrs:{id:"add-the-received-value-at-the-end-of-the-topic"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-the-received-value-at-the-end-of-the-topic"}},[e._v("#")]),e._v(' Add the received "value" at the end of the topic')]),e._v(" "),t("p",[e._v('For the gateways that publish a "value" parameter on the json (RF, IR...), it is possible to concatenate this parameter at the end of the topic.\nSo as to activate this function you need to set '),t("code",[e._v("valueAsATopic")]),e._v(" to true in User_config.h")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("ifndef")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[e._v("valueAsATopic")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("define")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token macro-name"}},[e._v("valueAsATopic")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("false")]),e._v(" ")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("// define true to integrate msg value into the subject when receiving")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("endif")])]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br")])]),t("p",[e._v("Per default you see the following data:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/SRFBtoMQTT {"raw":"2B660186042E00E7E5","value":"59365","delay":"1111","val_Thigh":"390","val_Tlow":"1070"}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("With the line uncommented you will see:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/SRFBtoMQTT/59365 {"raw":"2B660186042E00E7E5","value":"59365","delay":"1111","val_Thigh":"390","val_Tlow":"1070"}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("It can be useful to avoid warning or errors on certain controllers.")]),e._v(" "),t("h2",{attrs:{id:"auto-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#auto-discovery"}},[e._v("#")]),e._v(" Auto discovery")]),e._v(" "),t("p",[e._v("Home Assistant discovery is enabled by default on all binaries and platformio configurations.")]),e._v(" "),t("p",[e._v("To have a working discovery setup you need to enable it on your MQTT integration definition in HASS.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("With platformio you can deactivate discovery by adding:")]),e._v(" "),t("div",{staticClass:"language-ini line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ini"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-UZmqttDiscovery")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"HADiscovery"\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("To your environment definition.")])]),e._v(" "),t("p",[e._v("So as to create the MQTT username and password, you have to create a new user(recommended) into Home Assistant->Configuration->Users (available in admin mode) or use an existing username/pwd combination (not recommended). This user doesn't need to be an administrator.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(276),alt:"MQTT User"}})]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("The max size of the username is 30 and 60 for the password.")])]),e._v(" "),t("p",[e._v("OMG will use the auto discovery functionality of home assistant to create sensors and gateways into your HASS instance automatically.")]),e._v(" "),t("p",[e._v("The gateway device will be available into Configuration->Devices section of Home Assistant.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(277),alt:"MQTT Device settings"}})])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/39.ef306863.js b/dev/assets/js/39.3c2b16b3.js similarity index 97% rename from dev/assets/js/39.ef306863.js rename to dev/assets/js/39.3c2b16b3.js index f9ae9914..aa6517ac 100644 --- a/dev/assets/js/39.ef306863.js +++ b/dev/assets/js/39.3c2b16b3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{267:function(e,t,o){e.exports=o.p+"assets/img/OpenMQTTgateway_M5_Stack_Board_Display_Text.7a6039b8.png"},408:function(e,t,o){e.exports=o.p+"assets/img/OpenMQTTgateway_M5_StickC_Board_Display_Text.82873002.png"},462:function(e,t,o){"use strict";o.r(t);var a=o(14),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"boards"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#boards"}},[e._v("#")]),e._v(" Boards")]),e._v(" "),t("h2",{attrs:{id:"esp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#esp"}},[e._v("#")]),e._v(" ESP")]),e._v(" "),t("h3",{attrs:{id:"erasing-the-flash"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#erasing-the-flash"}},[e._v("#")]),e._v(" Erasing the flash")]),e._v(" "),t("p",[e._v("So as to erase the flash memory on ESP boards you may do a long press to TRIGGER_GPIO button or connect the pin TRIGGER_GPIO to the ground during several seconds.")]),e._v(" "),t("p",[e._v("On M5Stack boards you may do a long press to these buttons in low power mode 0 (see below how to go to low power mode 0):")]),e._v(" "),t("ul",[t("li",[e._v("Button B on M5StickC and M5StickC Plus (GPIO 37)")]),e._v(" "),t("li",[e._v("Button C on M5Stack (GPIO 37)")]),e._v(" "),t("li",[e._v("Button lateral on M5stick (GPIO 35)")])]),e._v(" "),t("p",[e._v("You can also do a long press when powering the board to reset it, this press must be done during the first 5 seconds after the start.")]),e._v(" "),t("h3",{attrs:{id:"wifi-interference-on-sensors-when-using-an-esp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#wifi-interference-on-sensors-when-using-an-esp"}},[e._v("#")]),e._v(" Wifi interference on sensors when using an ESP")]),e._v(" "),t("p",[e._v("Certain sensors like HC-SR501 is prone to generate false signals / triggers when used on a ESP with Wifi enabled. To reduce or eliminate the effect the board must be put into Wifi B/G with lower TX power.")]),e._v(" "),t("p",[e._v("This can be achieved with the following macro, "),t("code",[e._v("WifiGMode")]),e._v(" defined true and "),t("code",[e._v("WifiPower")]),e._v(" to e.g. WIFI_POWER_11dBm (ESP32) or 11 (ESP8266).")]),e._v(" "),t("p",[e._v("Since the WiFi protocol is persisted in the flash of the ESP you have to run at least once with "),t("code",[e._v("WiFiGMode")]),e._v(" defined "),t("strong",[e._v("false")]),e._v(" to get Band N back.")]),e._v(" "),t("h3",{attrs:{id:"low-power-mode-for-esp32"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#low-power-mode-for-esp32"}},[e._v("#")]),e._v(" Low power mode for ESP32")]),e._v(" "),t("p",[e._v("OpenMQTTGateway support a low power mode for ESP32, the boards needs to have the macro "),t("code",[e._v("DEFAULT_LOW_POWER_MODE")]),e._v(" defined at "),t("code",[e._v("ALWAYS_ON")]),e._v(", "),t("code",[e._v("INTERVAL")]),e._v(" or "),t("code",[e._v("ACTION")]),e._v(" to use it. More information about the modes is available into User_config.h.")]),e._v(" "),t("p",[e._v("When available this mode can be set by MQTT:")]),e._v(" "),t("ul",[t("li",[e._v("Normal mode (per default)")])]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"powermode":0, "save":true}\'')])]),e._v(" "),t("ul",[t("li",[e._v("Low Power mode wake up from interval defined by DEEP_SLEEP_IN_US and pins defined by ESP32_EXT0_WAKE_PIN and/or ESP32_EXT1_WAKE_PIN")])]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"powermode":1, "save":true}\'')])]),e._v(" "),t("ul",[t("li",[e._v("Low Power mode wake up from pins defined by ESP32_EXT0_WAKE_PIN and/or ESP32_EXT1_WAKE_PIN")])]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"powermode":2, "save":true}\'')])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("A low power mode switch is automatically created by discovery with Home Assistant, you may experience a delay between the command and the state update due to the fact that the update will be received and acknowledged when the device woke up.\nIf you are publishing the state change while the device is asleep use the retain flag. This way the device will retrieve the powermode command at wake up.")])]),e._v(" "),t("p",[e._v("The default sleep time is defined by the macro "),t("code",[e._v("DEEP_SLEEP_IN_US")]),e._v(" (default 60s)")]),e._v(" "),t("p",[e._v("We can also use an external sensor state to wake-up the ESP, this is defined by macro "),t("code",[e._v("ESP32_EXT0_WAKE_PIN/ESP32_EXT1_WAKE_PIN")]),e._v(", the level is defined by the macro "),t("code",[e._v("ESP32_EXT0_WAKE_PIN_STATE/ESP32_EXT0_WAKE_PIN_STATE")]),e._v(" (default to HIGH).")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("If you change the default low power mode to INTERVAL or ACTION and your credential are not set or not correct, the ESP32 will not connect to the broker and the only way to change the low power mode will be a new erase/upload.")])]),e._v(" "),t("h2",{attrs:{id:"m5stickc-m5stickc-plus-or-m5stack"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#m5stickc-m5stickc-plus-or-m5stack"}},[e._v("#")]),e._v(" M5StickC, M5StickC Plus or M5Stack")]),e._v(" "),t("h3",{attrs:{id:"behaviour"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#behaviour"}},[e._v("#")]),e._v(" Behaviour")]),e._v(" "),t("p",[e._v("If the connection of the board to WiFi and MQTT is successful you will see the logo with text like below:")]),e._v(" "),t("p",[t("img",{attrs:{src:o(267),alt:"boards"}})]),e._v(" "),t("p",[e._v("The same behaviour apply to M5StickC and M5StickC Plus")]),e._v(" "),t("p",[t("img",{attrs:{src:o(408),alt:"boards"}})]),e._v(" "),t("h3",{attrs:{id:"setting-the-log-output"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-log-output"}},[e._v("#")]),e._v(" Setting the log output")]),e._v(" "),t("p",[e._v("Per default the log of the M5 boards is going to the LCD display with Errors and Warnings only, if you want to change the output at build time you can do it in "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/development/main/config_M5.h",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_M5.h"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("You can also change it by MQTT. For example if you want to set to LCD")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoM5/config -m '{\"log-display\":true}'")])]),e._v(" "),t("p",[e._v("you can also revert it to the serial monitor:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoM5/config -m '{\"log-display\":false}'")])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{267:function(e,t,o){e.exports=o.p+"assets/img/OpenMQTTgateway_M5_Stack_Board_Display_Text.7a6039b8.png"},396:function(e,t,o){e.exports=o.p+"assets/img/OpenMQTTgateway_M5_StickC_Board_Display_Text.82873002.png"},458:function(e,t,o){"use strict";o.r(t);var a=o(14),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"boards"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#boards"}},[e._v("#")]),e._v(" Boards")]),e._v(" "),t("h2",{attrs:{id:"esp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#esp"}},[e._v("#")]),e._v(" ESP")]),e._v(" "),t("h3",{attrs:{id:"erasing-the-flash"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#erasing-the-flash"}},[e._v("#")]),e._v(" Erasing the flash")]),e._v(" "),t("p",[e._v("So as to erase the flash memory on ESP boards you may do a long press to TRIGGER_GPIO button or connect the pin TRIGGER_GPIO to the ground during several seconds.")]),e._v(" "),t("p",[e._v("On M5Stack boards you may do a long press to these buttons in low power mode 0 (see below how to go to low power mode 0):")]),e._v(" "),t("ul",[t("li",[e._v("Button B on M5StickC and M5StickC Plus (GPIO 37)")]),e._v(" "),t("li",[e._v("Button C on M5Stack (GPIO 37)")]),e._v(" "),t("li",[e._v("Button lateral on M5stick (GPIO 35)")])]),e._v(" "),t("p",[e._v("You can also do a long press when powering the board to reset it, this press must be done during the first 5 seconds after the start.")]),e._v(" "),t("h3",{attrs:{id:"wifi-interference-on-sensors-when-using-an-esp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#wifi-interference-on-sensors-when-using-an-esp"}},[e._v("#")]),e._v(" Wifi interference on sensors when using an ESP")]),e._v(" "),t("p",[e._v("Certain sensors like HC-SR501 is prone to generate false signals / triggers when used on a ESP with Wifi enabled. To reduce or eliminate the effect the board must be put into Wifi B/G with lower TX power.")]),e._v(" "),t("p",[e._v("This can be achieved with the following macro, "),t("code",[e._v("WifiGMode")]),e._v(" defined true and "),t("code",[e._v("WifiPower")]),e._v(" to e.g. WIFI_POWER_11dBm (ESP32) or 11 (ESP8266).")]),e._v(" "),t("p",[e._v("Since the WiFi protocol is persisted in the flash of the ESP you have to run at least once with "),t("code",[e._v("WiFiGMode")]),e._v(" defined "),t("strong",[e._v("false")]),e._v(" to get Band N back.")]),e._v(" "),t("h3",{attrs:{id:"low-power-mode-for-esp32"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#low-power-mode-for-esp32"}},[e._v("#")]),e._v(" Low power mode for ESP32")]),e._v(" "),t("p",[e._v("OpenMQTTGateway support a low power mode for ESP32, the boards needs to have the macro "),t("code",[e._v("DEFAULT_LOW_POWER_MODE")]),e._v(" defined at "),t("code",[e._v("ALWAYS_ON")]),e._v(", "),t("code",[e._v("INTERVAL")]),e._v(" or "),t("code",[e._v("ACTION")]),e._v(" to use it. More information about the modes is available into User_config.h.")]),e._v(" "),t("p",[e._v("When available this mode can be set by MQTT:")]),e._v(" "),t("ul",[t("li",[e._v("Normal mode (per default)")])]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"powermode":0, "save":true}\'')])]),e._v(" "),t("ul",[t("li",[e._v("Low Power mode wake up from interval defined by DEEP_SLEEP_IN_US and pins defined by ESP32_EXT0_WAKE_PIN and/or ESP32_EXT1_WAKE_PIN")])]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"powermode":1, "save":true}\'')])]),e._v(" "),t("ul",[t("li",[e._v("Low Power mode wake up from pins defined by ESP32_EXT0_WAKE_PIN and/or ESP32_EXT1_WAKE_PIN")])]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"powermode":2, "save":true}\'')])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("A low power mode switch is automatically created by discovery with Home Assistant, you may experience a delay between the command and the state update due to the fact that the update will be received and acknowledged when the device woke up.\nIf you are publishing the state change while the device is asleep use the retain flag. This way the device will retrieve the powermode command at wake up.")])]),e._v(" "),t("p",[e._v("The default sleep time is defined by the macro "),t("code",[e._v("DEEP_SLEEP_IN_US")]),e._v(" (default 60s)")]),e._v(" "),t("p",[e._v("We can also use an external sensor state to wake-up the ESP, this is defined by macro "),t("code",[e._v("ESP32_EXT0_WAKE_PIN/ESP32_EXT1_WAKE_PIN")]),e._v(", the level is defined by the macro "),t("code",[e._v("ESP32_EXT0_WAKE_PIN_STATE/ESP32_EXT0_WAKE_PIN_STATE")]),e._v(" (default to HIGH).")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("If you change the default low power mode to INTERVAL or ACTION and your credential are not set or not correct, the ESP32 will not connect to the broker and the only way to change the low power mode will be a new erase/upload.")])]),e._v(" "),t("h2",{attrs:{id:"m5stickc-m5stickc-plus-or-m5stack"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#m5stickc-m5stickc-plus-or-m5stack"}},[e._v("#")]),e._v(" M5StickC, M5StickC Plus or M5Stack")]),e._v(" "),t("h3",{attrs:{id:"behaviour"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#behaviour"}},[e._v("#")]),e._v(" Behaviour")]),e._v(" "),t("p",[e._v("If the connection of the board to WiFi and MQTT is successful you will see the logo with text like below:")]),e._v(" "),t("p",[t("img",{attrs:{src:o(267),alt:"boards"}})]),e._v(" "),t("p",[e._v("The same behaviour apply to M5StickC and M5StickC Plus")]),e._v(" "),t("p",[t("img",{attrs:{src:o(396),alt:"boards"}})]),e._v(" "),t("h3",{attrs:{id:"setting-the-log-output"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-log-output"}},[e._v("#")]),e._v(" Setting the log output")]),e._v(" "),t("p",[e._v("Per default the log of the M5 boards is going to the LCD display with Errors and Warnings only, if you want to change the output at build time you can do it in "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/development/main/config_M5.h",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_M5.h"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("You can also change it by MQTT. For example if you want to set to LCD")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoM5/config -m '{\"log-display\":true}'")])]),e._v(" "),t("p",[e._v("you can also revert it to the serial monitor:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoM5/config -m '{\"log-display\":false}'")])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/40.86da81a8.js b/dev/assets/js/40.54f66a91.js similarity index 85% rename from dev/assets/js/40.86da81a8.js rename to dev/assets/js/40.54f66a91.js index 6bfc9249..98e62e55 100644 --- a/dev/assets/js/40.86da81a8.js +++ b/dev/assets/js/40.54f66a91.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{413:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial_2G_1.80def2ff.jpg"},414:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial_2G_2.48b36c44.jpg"},466:function(e,t,a){"use strict";a.r(t);var s=a(14),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"gsm-2g-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gsm-2g-gateway"}},[e._v("#")]),e._v(" GSM 2G gateway")]),e._v(" "),t("h2",{attrs:{id:"receiving-sms-from-2g"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-sms-from-2g"}},[e._v("#")]),e._v(" Receiving SMS from 2G")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:\n"),t("code",[e._v("mosquitto_sub -t +/# -v")])]),e._v(" "),t("p",[e._v("Generate your SMS by sending an SMS to the phone number of the A6/A7 SIM card you will see :")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/2GtoMQTT {"phone":"+33123456789","date":"2018/04/22,16:17:51+02","message":"Hello OpenMQTTGateway"}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("h2",{attrs:{id:"send-data-by-mqtt-to-send-an-sms-message-with-a6-7"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-send-an-sms-message-with-a6-7"}},[e._v("#")]),e._v(" Send data by MQTT to send an SMS message with A6/7")]),e._v(" "),t("p",[t("code",[e._v('sudo mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTto2G -m \'{"phone":"+33123456789","date":"2018/04/22,16:17:51+02","message":"hello"}\'')])]),e._v(" "),t("p",[e._v('This command will send by SMS the sentence "hello" and use the phone number 0123456789')]),e._v(" "),t("p",[e._v("Arduino IDE serial data received when publishing data by MQTT")]),e._v(" "),t("p",[t("img",{attrs:{src:a(413),alt:""}})]),e._v(" "),t("p",[e._v("Arduino IDE serial data received when receiving SMS")]),e._v(" "),t("p",[t("img",{attrs:{src:a(414),alt:""}})])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{406:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial_2G_1.80def2ff.jpg"},407:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial_2G_2.48b36c44.jpg"},462:function(e,t,a){"use strict";a.r(t);var s=a(14),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"gsm-2g-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gsm-2g-gateway"}},[e._v("#")]),e._v(" GSM 2G gateway")]),e._v(" "),t("h2",{attrs:{id:"receiving-sms-from-2g"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-sms-from-2g"}},[e._v("#")]),e._v(" Receiving SMS from 2G")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:\n"),t("code",[e._v("mosquitto_sub -t +/# -v")])]),e._v(" "),t("p",[e._v("Generate your SMS by sending an SMS to the phone number of the A6/A7 SIM card you will see :")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('home/OpenMQTTGateway/2GtoMQTT {"phone":"+33123456789","date":"2018/04/22,16:17:51+02","message":"Hello OpenMQTTGateway"}\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("h2",{attrs:{id:"send-data-by-mqtt-to-send-an-sms-message-with-a6-7"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-send-an-sms-message-with-a6-7"}},[e._v("#")]),e._v(" Send data by MQTT to send an SMS message with A6/7")]),e._v(" "),t("p",[t("code",[e._v('sudo mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTto2G -m \'{"phone":"+33123456789","date":"2018/04/22,16:17:51+02","message":"hello"}\'')])]),e._v(" "),t("p",[e._v('This command will send by SMS the sentence "hello" and use the phone number 0123456789')]),e._v(" "),t("p",[e._v("Arduino IDE serial data received when publishing data by MQTT")]),e._v(" "),t("p",[t("img",{attrs:{src:a(406),alt:""}})]),e._v(" "),t("p",[e._v("Arduino IDE serial data received when receiving SMS")]),e._v(" "),t("p",[t("img",{attrs:{src:a(407),alt:""}})])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/42.a8267a4e.js b/dev/assets/js/42.0e20d6c3.js similarity index 99% rename from dev/assets/js/42.a8267a4e.js rename to dev/assets/js/42.0e20d6c3.js index a1fce305..29c8638e 100644 --- a/dev/assets/js/42.a8267a4e.js +++ b/dev/assets/js/42.0e20d6c3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{358:function(t,a){t.exports="data:image/png;base64,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"},430:function(t,a,s){"use strict";s.r(a);var n=s(14),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"integrate-openhab2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#integrate-openhab2"}},[t._v("#")]),t._v(" Integrate OPENHAB2")]),t._v(" "),a("h2",{attrs:{id:"auto-discovery-through-home-assistant-convention"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#auto-discovery-through-home-assistant-convention"}},[t._v("#")]),t._v(" Auto discovery through home assistant convention")]),t._v(" "),a("p",[t._v("OpenMQTTGateway support autodiscovery of things for OpenHAB 2.4, so as to do that it rely on home assistant auto discovery convention.\nSo as to use the autodiscovery function you need to have:")]),t._v(" "),a("ul",[a("li",[t._v("The Jinga transformation addon installed")]),t._v(" "),a("li",[t._v("The Json transformation addon installed")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If you are connecting to BLE devices it is highly recommended to set "),a("code",[t._v("filterConnectable")]),t._v(" to "),a("code",[t._v("true")]),t._v(" in "),a("RouterLink",{attrs:{to:"/use/ble.html#advanced-filter-out-connectable-devices"}},[t._v("BT configuration")]),t._v(". Otherwise you may encounter incomplete data.")],1)]),t._v(" "),a("p",[t._v("The things will appear in the inbox of the paperUI, add them and links the channels. You should see them into the control panel for further usage.\n"),a("img",{attrs:{src:s(358),alt:"OpenHAB integration"}})]),t._v(" "),a("h2",{attrs:{id:"mqtt-2-manual-setup-openhab2-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mqtt-2-manual-setup-openhab2-4"}},[t._v("#")]),t._v(" MQTT 2 manual setup >=Openhab2.4")]),t._v(" "),a("p",[t._v("You should have an MQTT broker installed (either mosquitto or the OpenHAB2 embedded one)")]),t._v(" "),a("p",[t._v("In paper UI")]),t._v(" "),a("ul",[a("li",[t._v("In bindings add the MQTT Things binding")]),t._v(" "),a("li",[t._v("Inbox > MQTT Things binding > Add manually >MQTT Broker : configure your broker")]),t._v(" "),a("li",[t._v("Inbox > MQTT Things binding > Add manually >Generic MQTT Thing : select your previously configured broker as a bridge and enter your thing definition (example RF plug, weather station, PIR sensor)")]),t._v(" "),a("li",[t._v('Configuration > Things > "Your thing" : click on + and add one channel for each thing parameter (example for a weather station, you will have one channel for the temperature, one channel for the humidity etc..)')]),t._v(" "),a("li",[t._v("For a state channel define the MQTT topic like this:")])]),t._v(" "),a("h2",{attrs:{id:"for-a-mi-flora-or-mi-jia-temperature"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#for-a-mi-flora-or-mi-jia-temperature"}},[t._v("#")]),t._v(" For a mi flora or mi jia temperature :")]),t._v(" "),a("p",[a("code",[t._v("home/+/BTtoMQTT/C47C9999D1B8")])]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Click on show more")])]),t._v(" "),a("li",[a("p",[t._v('And add in "Incoming values transformation"')])])]),t._v(" "),a("p",[a("code",[t._v("JSONPATH:$.tem")])]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Click on Save")])]),t._v(" "),a("li",[a("p",[t._v("Repeat for each channels and each things")])]),t._v(" "),a("li",[a("p",[t._v('Configuration > Things > "Your thing" : click on a channel and add 1 or several items per channel defining what you want to display in the sitemap\nor')])]),t._v(" "),a("li",[a("p",[t._v("Define your items in an item file like this by referring to your MQTT things channels:\nFor a mi flora and mi jia")])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// MI JIA")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" humidity\t\t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Humidité air[%.1f %%]"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("water"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\t\t "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:dc2222e6:humidite-mijia"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" temperature \t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Température[%.1f °C]"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("temperature"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\t "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:dc2222e6:temperature-mijia"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" battery \t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Batterie capteur[%.1f %]"')]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("volt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\t "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:dc2222e6:batterie-mijia"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// MI FLORA")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" humidity_P\t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hygrométrie plante[%.1f %%]"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("water"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\t "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:1fb33334:humidite-miflora"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" temperature_P \t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Température plante[%.1f °C]"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("temperature"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:1fb33334:temperature-miflora"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" fertility_P\t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Fertilité plante[%.1f uS/cm]"')]),t._v(" \t "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:1fb33334:fertilite-miflora"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" lux_P\t\t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Luminiosité plante[%.1f lux]"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:1fb33334:lux-miflora"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h2",{attrs:{id:"for-a-switch-channel-add-a-channel-by-choosing-the-type-on-off-switch"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#for-a-switch-channel-add-a-channel-by-choosing-the-type-on-off-switch"}},[t._v("#")]),t._v(' For a switch channel, add a channel by choosing the type "On/Off switch"')]),t._v(" "),a("p",[t._v("define the MQTT state topic like this:\n"),a("code",[t._v("home/+/433toMQTT")])]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Click on show more")])]),t._v(" "),a("li",[a("p",[t._v('add in "Incoming values transformation"\n'),a("code",[t._v("JSONPATH:$.value")])])]),t._v(" "),a("li",[a("p",[t._v("define the command topic like this:\n"),a("code",[t._v("home/+/commands/MQTTto433")])])]),t._v(" "),a("li",[a("p",[t._v("add the value corresponding to ON state and to OFF state\n1312081\n1312084")])]),t._v(" "),a("li",[a("p",[t._v("Click on Save")])]),t._v(" "),a("li",[a("p",[t._v("Repeat for each channels and each things")])]),t._v(" "),a("li",[a("p",[t._v('Configuration > Things > "Your thing" : click on a channel and add 1 or several switch per channel\nor')])]),t._v(" "),a("li",[a("p",[t._v("Define your items in an item file like this by referring to your MQTT thing channel:")])])]),t._v(" "),a("p",[a("code",[t._v('Switch OMGSwitch "Prise 1" {channel="mqtt:topic:08998877:Power1"}')])]),t._v(" "),a("h1",{attrs:{id:"presence-detection-from-rickitaly"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#presence-detection-from-rickitaly"}},[t._v("#")]),t._v(" Presence detection (from @rickitaly)")]),t._v(" "),a("p",[t._v("in thing file:")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Thing")]),t._v(" mqtt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("topic"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("omgentrance "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mqtt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("broker"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("localBroker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Channels")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Type")]),t._v(" string "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" blepresence "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"People Presence"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" stateTopic"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/home_presence/OpenMQTTGatewayEntrance"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br")])]),a("p",[t._v("in item file")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OMG_BLE_Entrance")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BLE Entrance Detector"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:omgentrance:blepresence"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Switch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Presence_Keys_Rick")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Rick\'s Keys"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("keyring"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("People")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gKeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("expire"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"240s,OFF"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("p",[t._v("In rule file:")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v("rule "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BLE Presence Detector"')]),t._v("\nwhen\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Item")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OMG_BLE_Entrance")]),t._v(" received update\nthen\nval "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" msg "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OMG_BLE_Entrance")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("state as "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StringType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toString\nval "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"JSONPATH"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"$.id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" msg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toString\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"xx:xx:xx:xx:xx:xx"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Presence_Keys_Rick")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("postUpdate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nend\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{348:function(t,a){t.exports="data:image/png;base64,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"},429:function(t,a,s){"use strict";s.r(a);var n=s(14),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"integrate-openhab2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#integrate-openhab2"}},[t._v("#")]),t._v(" Integrate OPENHAB2")]),t._v(" "),a("h2",{attrs:{id:"auto-discovery-through-home-assistant-convention"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#auto-discovery-through-home-assistant-convention"}},[t._v("#")]),t._v(" Auto discovery through home assistant convention")]),t._v(" "),a("p",[t._v("OpenMQTTGateway support autodiscovery of things for OpenHAB 2.4, so as to do that it rely on home assistant auto discovery convention.\nSo as to use the autodiscovery function you need to have:")]),t._v(" "),a("ul",[a("li",[t._v("The Jinga transformation addon installed")]),t._v(" "),a("li",[t._v("The Json transformation addon installed")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If you are connecting to BLE devices it is highly recommended to set "),a("code",[t._v("filterConnectable")]),t._v(" to "),a("code",[t._v("true")]),t._v(" in "),a("RouterLink",{attrs:{to:"/use/ble.html#advanced-filter-out-connectable-devices"}},[t._v("BT configuration")]),t._v(". Otherwise you may encounter incomplete data.")],1)]),t._v(" "),a("p",[t._v("The things will appear in the inbox of the paperUI, add them and links the channels. You should see them into the control panel for further usage.\n"),a("img",{attrs:{src:s(348),alt:"OpenHAB integration"}})]),t._v(" "),a("h2",{attrs:{id:"mqtt-2-manual-setup-openhab2-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mqtt-2-manual-setup-openhab2-4"}},[t._v("#")]),t._v(" MQTT 2 manual setup >=Openhab2.4")]),t._v(" "),a("p",[t._v("You should have an MQTT broker installed (either mosquitto or the OpenHAB2 embedded one)")]),t._v(" "),a("p",[t._v("In paper UI")]),t._v(" "),a("ul",[a("li",[t._v("In bindings add the MQTT Things binding")]),t._v(" "),a("li",[t._v("Inbox > MQTT Things binding > Add manually >MQTT Broker : configure your broker")]),t._v(" "),a("li",[t._v("Inbox > MQTT Things binding > Add manually >Generic MQTT Thing : select your previously configured broker as a bridge and enter your thing definition (example RF plug, weather station, PIR sensor)")]),t._v(" "),a("li",[t._v('Configuration > Things > "Your thing" : click on + and add one channel for each thing parameter (example for a weather station, you will have one channel for the temperature, one channel for the humidity etc..)')]),t._v(" "),a("li",[t._v("For a state channel define the MQTT topic like this:")])]),t._v(" "),a("h2",{attrs:{id:"for-a-mi-flora-or-mi-jia-temperature"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#for-a-mi-flora-or-mi-jia-temperature"}},[t._v("#")]),t._v(" For a mi flora or mi jia temperature :")]),t._v(" "),a("p",[a("code",[t._v("home/+/BTtoMQTT/C47C9999D1B8")])]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Click on show more")])]),t._v(" "),a("li",[a("p",[t._v('And add in "Incoming values transformation"')])])]),t._v(" "),a("p",[a("code",[t._v("JSONPATH:$.tem")])]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Click on Save")])]),t._v(" "),a("li",[a("p",[t._v("Repeat for each channels and each things")])]),t._v(" "),a("li",[a("p",[t._v('Configuration > Things > "Your thing" : click on a channel and add 1 or several items per channel defining what you want to display in the sitemap\nor')])]),t._v(" "),a("li",[a("p",[t._v("Define your items in an item file like this by referring to your MQTT things channels:\nFor a mi flora and mi jia")])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// MI JIA")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" humidity\t\t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Humidité air[%.1f %%]"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("water"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\t\t "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:dc2222e6:humidite-mijia"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" temperature \t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Température[%.1f °C]"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("temperature"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\t "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:dc2222e6:temperature-mijia"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" battery \t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Batterie capteur[%.1f %]"')]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("volt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\t "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:dc2222e6:batterie-mijia"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// MI FLORA")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" humidity_P\t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hygrométrie plante[%.1f %%]"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("water"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\t "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:1fb33334:humidite-miflora"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" temperature_P \t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Température plante[%.1f °C]"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("temperature"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:1fb33334:temperature-miflora"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" fertility_P\t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Fertilité plante[%.1f uS/cm]"')]),t._v(" \t "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:1fb33334:fertilite-miflora"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Number")]),t._v(" lux_P\t\t"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Luminiosité plante[%.1f lux]"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:1fb33334:lux-miflora"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h2",{attrs:{id:"for-a-switch-channel-add-a-channel-by-choosing-the-type-on-off-switch"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#for-a-switch-channel-add-a-channel-by-choosing-the-type-on-off-switch"}},[t._v("#")]),t._v(' For a switch channel, add a channel by choosing the type "On/Off switch"')]),t._v(" "),a("p",[t._v("define the MQTT state topic like this:\n"),a("code",[t._v("home/+/433toMQTT")])]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Click on show more")])]),t._v(" "),a("li",[a("p",[t._v('add in "Incoming values transformation"\n'),a("code",[t._v("JSONPATH:$.value")])])]),t._v(" "),a("li",[a("p",[t._v("define the command topic like this:\n"),a("code",[t._v("home/+/commands/MQTTto433")])])]),t._v(" "),a("li",[a("p",[t._v("add the value corresponding to ON state and to OFF state\n1312081\n1312084")])]),t._v(" "),a("li",[a("p",[t._v("Click on Save")])]),t._v(" "),a("li",[a("p",[t._v("Repeat for each channels and each things")])]),t._v(" "),a("li",[a("p",[t._v('Configuration > Things > "Your thing" : click on a channel and add 1 or several switch per channel\nor')])]),t._v(" "),a("li",[a("p",[t._v("Define your items in an item file like this by referring to your MQTT thing channel:")])])]),t._v(" "),a("p",[a("code",[t._v('Switch OMGSwitch "Prise 1" {channel="mqtt:topic:08998877:Power1"}')])]),t._v(" "),a("h1",{attrs:{id:"presence-detection-from-rickitaly"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#presence-detection-from-rickitaly"}},[t._v("#")]),t._v(" Presence detection (from @rickitaly)")]),t._v(" "),a("p",[t._v("in thing file:")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Thing")]),t._v(" mqtt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("topic"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("omgentrance "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mqtt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("broker"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("localBroker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Channels")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Type")]),t._v(" string "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" blepresence "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"People Presence"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" stateTopic"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"home/home_presence/OpenMQTTGatewayEntrance"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br")])]),a("p",[t._v("in item file")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OMG_BLE_Entrance")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BLE Entrance Detector"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" channel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mqtt:topic:omgentrance:blepresence"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Switch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Presence_Keys_Rick")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Rick\'s Keys"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("keyring"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("People")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gKeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("expire"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"240s,OFF"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("p",[t._v("In rule file:")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v("rule "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BLE Presence Detector"')]),t._v("\nwhen\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Item")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OMG_BLE_Entrance")]),t._v(" received update\nthen\nval "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" msg "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OMG_BLE_Entrance")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("state as "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StringType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toString\nval "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"JSONPATH"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"$.id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" msg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toString\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"xx:xx:xx:xx:xx:xx"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Presence_Keys_Rick")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("postUpdate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nend\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/45.5c10c010.js b/dev/assets/js/45.aa140053.js similarity index 99% rename from dev/assets/js/45.5c10c010.js rename to dev/assets/js/45.aa140053.js index 5a4af194..0390f350 100644 --- a/dev/assets/js/45.5c10c010.js +++ b/dev/assets/js/45.aa140053.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{404:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-OTA-Update-Home-Assistant.1b857c45.png"},460:function(e,t,a){"use strict";a.r(t);var s=a(14),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"system-commands-esp-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#system-commands-esp-only"}},[e._v("#")]),e._v(" System commands (ESP only)")]),e._v(" "),t("h2",{attrs:{id:"restart-the-esp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#restart-the-esp"}},[e._v("#")]),e._v(" Restart the ESP")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"cmd":"restart"}\'')])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("With Home Assistant, this command is directly available through MQTT auto discovery as a switch into the HASS OpenMQTTGateway device entities list.")])]),e._v(" "),t("h2",{attrs:{id:"erase-the-esp-settings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#erase-the-esp-settings"}},[e._v("#")]),e._v(" Erase the ESP settings")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"cmd":"erase"}\'')])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("With Home Assistant, this command is directly available through MQTT auto discovery as a switch into the HASS OpenMQTTGateway device entities list.")])]),e._v(" "),t("h2",{attrs:{id:"retrieve-current-status-of-the-esp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#retrieve-current-status-of-the-esp"}},[e._v("#")]),e._v(" Retrieve current status of the ESP")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"cmd":"status"}\'')])]),e._v(" "),t("h2",{attrs:{id:"auto-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#auto-discovery"}},[e._v("#")]),e._v(" Auto discovery")]),e._v(" "),t("p",[e._v("You can deactivate the MQTT auto-discovery function, which enables you to create devices/entities with the Home Assistant convention automatically. This function is set to "),t("code",[e._v("true")]),e._v(" at startup for 30 minutes unless you deactivate it.")]),e._v(" "),t("h3",{attrs:{id:"deactivate"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deactivate"}},[e._v("#")]),e._v(" Deactivate")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"disc":false}\'')])]),e._v(" "),t("h3",{attrs:{id:"activate"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#activate"}},[e._v("#")]),e._v(" Activate")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"disc":true}\'')])]),e._v(" "),t("p",[e._v("If you want the settings to be kept upon gateway restart, you can save the state by adding "),t("code",[e._v('"save":true')]),e._v(" (ESP32 only).\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"disc":false, "save":true}\'')])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("Auto discovery is enabled by default on release binaries and platformio.")])]),e._v(" "),t("h2",{attrs:{id:"activate-offline-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#activate-offline-mode"}},[e._v("#")]),e._v(" Activate Offline mode")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"offline":true,"save":true}\'')])]),e._v(" "),t("h2",{attrs:{id:"change-the-wifi-credentials"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-wifi-credentials"}},[e._v("#")]),e._v(" Change the WiFi credentials")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"wifi_ssid":"ssid", "wifi_pass":"password"}\'')])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If the new connection fails the gateway will fallback to the previous connection.")])]),e._v(" "),t("h2",{attrs:{id:"change-the-gateway-password"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-gateway-password"}},[e._v("#")]),e._v(" Change the gateway password")]),e._v(" "),t("p",[e._v("The password must be 8 characters minimum.")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"gw_pass":"12345678"}\'')])]),e._v(" "),t("h2",{attrs:{id:"change-the-mqtt-broker-credentials"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-mqtt-broker-credentials"}},[e._v("#")]),e._v(" Change the MQTT broker credentials")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m\n\'{\n "mqtt_user": "user_name",\n "mqtt_pass": "password",\n "mqtt_server": "host",\n "mqtt_port": "port",\n "mqtt_validate": false,\n "mqtt_secure": false\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("INFO")]),e._v(" "),t("p",[e._v("By default this function is not available on the pre built binary of RFBridge, in order to have less code size and enable to have OTA update working properly. So as to enable it remove from the rf bridge env:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("build_flags = '-UMQTTsetMQTT'\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If the new connection fails the gateway will fallback to the previous connection.")])]),e._v(" "),t("h2",{attrs:{id:"change-the-mqtt-main-topic-discovery-prefix-and-or-gateway-name"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-mqtt-main-topic-discovery-prefix-and-or-gateway-name"}},[e._v("#")]),e._v(" Change the MQTT main topic, discovery prefix, and or gateway name")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m\n\'{\n "mqtt_topic": "topic/",\n "discovery_prefix": "prefix",\n "gateway_name": "name"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("INFO")]),e._v(" "),t("p",[e._v("This will change the subscribed and published mqtt_topic/gateway_name that the gateway uses. No parameters are mandatory, the current topic or gateway name will be used if not supplied.")])]),e._v(" "),t("h2",{attrs:{id:"switching-brokers-and-using-signed-and-client-certificates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#switching-brokers-and-using-signed-and-client-certificates"}},[e._v("#")]),e._v(" Switching brokers and using signed and client certificates")]),e._v(" "),t("p",[e._v("In the "),t("code",[e._v("user_config.h")]),e._v(" file it is possible to specify multiple MQTT brokers and client certificates.\nAdditionally, support for multiple brokers and client certificates has been added. To use this, it is required that the server certificate, client certificate, and client key are provided as their own constant string value as demonstrated in the file."),t("br"),e._v("\nTo add more than one broker and switch between them it is necessary to provide all of the relevant certificates/keys and add their respective variable names in the "),t("code",[e._v("cnt_parameters_array")]),e._v(" structure, as shown in "),t("code",[e._v("user_config.h")]),e._v("..")]),e._v(" "),t("p",[e._v("To switch between these connections with an MQTT command message, the format is as follows:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m\n\'{\n "mqtt_user": "user",\n "mqtt_pass": "password",\n "mqtt_server": "host",\n "mqtt_port": "port",\n "mqtt_secure": true,\n "mqtt_validate": true,\n "cnt_index":1,\n "save_cnt": true\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("cnt_index")]),e._v(" value corresponds to the 0 to 2 index of the "),t("code",[e._v("cnt_parameters_array")]),e._v(" in "),t("code",[e._v("user_config.h")]),e._v(".\n0 being the default index, containing the onboarding parameters.")])]),e._v(" "),t("p",[e._v("To read the connection parameters:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m\n\'{\n "cnt_index":1,\n "read_cnt": true\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("To test a connection change without saving:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m\n\'{\n "cnt_index":1,\n "test_cnt": true\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If the client can't connect to the MQTT broker corresponding to the current "),t("code",[e._v("cnt_index")]),e._v(", it will increment the index to the next valid connection set and restart with it.")])]),e._v(" "),t("h2",{attrs:{id:"saving-loading-connection-parameters-certificates-at-runtime"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#saving-loading-connection-parameters-certificates-at-runtime"}},[e._v("#")]),e._v(" Saving/Loading connection parameters/certificates at runtime")]),e._v(" "),t("p",[e._v("This chapter details the process for managing certificates/connections parameters used for secure MQTT communication with OpenMQTTGateway")]),e._v(" "),t("h3",{attrs:{id:"storing-and-loading-certificates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#storing-and-loading-certificates"}},[e._v("#")]),e._v(" Storing and Loading Certificates")]),e._v(" "),t("ul",[t("li",[e._v("Flash Memory Storage:\nCertificates can be saved to the flash memory using specific indices. Valid indices for storing certificates are 1 and 2, as 0 is reserved for the default certificate.")]),e._v(" "),t("li",[e._v("RAM Memory Loading:\nCertificates can be loaded from RAM, where valid indices range from 0 to 2. The device publishes a hash of the certificate to the broker to verify its identity. If the connection using the current certificate fails, the device will revert to the previous certificate.")])]),e._v(" "),t("h3",{attrs:{id:"use-case-changing-a-group-of-certificates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#use-case-changing-a-group-of-certificates"}},[e._v("#")]),e._v(" Use Case: Changing a Group of Certificates")]),e._v(" "),t("p",[e._v("When updating certificates, follow these steps to ensure that the new certificates are correctly loaded and used:")]),e._v(" "),t("ol",[t("li",[e._v("Push Certificates via MQTT:\nSend the new certificates one by one through MQTT, using indices 1 or 2. Replace newline characters (\\n) in the certificates with spaces.")])]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"cnt_index"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"mqtt_server_cert"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"-----BEGIN CERTIFICATE----- MIIDQTCC----END CERTIFICATE-----"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])]),t("p",[e._v("Accepted certificates are:")]),e._v(" "),t("ul",[t("li",[t("code",[e._v("mqtt_server_cert")])]),e._v(" "),t("li",[t("code",[e._v("mqtt_client_cert")])]),e._v(" "),t("li",[t("code",[e._v("mqtt_client_key")])]),e._v(" "),t("li",[t("code",[e._v("ota_server_cert")])])]),e._v(" "),t("ol",{attrs:{start:"2"}},[t("li",[e._v("Verify Certificates in RAM:\nAfter pushing the certificates, verify that they have been correctly loaded into RAM.")])]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"cnt_index"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"read_cnt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])]),t("ol",{attrs:{start:"3"}},[t("li",[e._v("Test and Save Certificates:\nOnce verification is complete, test the connection using the new certificates. If the connection is successful, send the command to save the certificates to flash.")])]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"cnt_index"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"save_cnt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])]),t("ol",{attrs:{start:"4"}},[t("li",[t("p",[e._v("Broker Connection:\nThe broker will attempt to use the newly received certificates for the connection.")])]),e._v(" "),t("li",[t("p",[e._v("Successful Connection Handling:\nIf the connection is successful, the certificates are permanently stored in the flash memory at the specified index.")])]),e._v(" "),t("li",[t("p",[e._v("Handling Connection Failures:\nIf the connection fails, the device will revert to the previously used certificate index, and the new certificates will not be saved.")])])]),e._v(" "),t("h1",{attrs:{id:"firmware-update-from-mqtt-esp-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#firmware-update-from-mqtt-esp-only"}},[e._v("#")]),e._v(" Firmware update from MQTT (ESP only)")]),e._v(" "),t("p",[e._v("When the gateway used is from a standard ESP32 environment "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/development/environments.ini",target:"_blank",rel:"noopener noreferrer"}},[e._v("listed and defined here"),t("OutboundLink")],1),e._v(", it can be updated through a simple MQTT command:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway_ESP32_BLE/commands/MQTTtoSYS/firmware_update" -m \'{\n "version": "latest"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br")])]),t("p",[e._v("This would download the latest version firmware binary from Github and install it.\nIt can be used with version 1.5.0 and above.")]),e._v(" "),t("p",[e._v("Note that this update option is also autodiscovered through Home Assistant convention, you can update directly from the device page with 2 clicks.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(404),alt:"Home Assistant OTA Update"}})]),e._v(" "),t("p",[e._v("You can also indicate the target version to update:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway_ESP32_BLE/commands/MQTTtoSYS/firmware_update" -m \'{\n "version": "v1.2.0"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br")])]),t("p",[e._v("OpenMQTTGateway checks at start and every hour if an update is available.")]),e._v(" "),t("p",[e._v("Alternatively if you want to choose the update URL you can use the command below (ESP32 and ESP8266):")]),e._v(" "),t("p",[e._v("Without certificate, in this case the gateway will use the ota_server_cert certificate defined in default_ota_cert.h")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway_ESP32_BLE/commands/MQTTtoSYS/firmware_update" -m \'{\n "version": "test",\n "password": "OTAPASSWORD",\n "url": "https://github.com/1technophile/OpenMQTTGateway/releases/download/v0.9.12/esp32dev-ble-firmware.bin"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("With certificate (replace the \\n in the certificate by spaces to publish it easily):")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway_ESP32_BLE/commands/MQTTtoSYS/firmware_update" -m \'{\n "version": "test",\n "password": "OTAPASSWORD",\n "url": "https://github.com/1technophile/OpenMQTTGateway/releases/download/v0.9.12/esp32dev-ble-firmware.bin",\n "ota_server_cert": "-----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE-----"}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("A bash script is available "),t("a",{attrs:{href:"ota_command_cert.zip"}},[e._v("here also")]),e._v(" to simplify the use of the "),t("code",[e._v("server_cert")]),e._v(" parameter.")]),e._v(" "),t("p",[e._v("Alternatively the OTA certificate can also be saved with the cnt_index for future use:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway_ESP32_BLE/commands/MQTTtoSYS/config" -m \'{\n "cnt_index": 1,\n "save_cnt":true,\n "ota_server_cert": "-----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE-----"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("The other connection parameters corresponding to the index need to be valid for the save function to work. This command will switch to connection parameters of index 1.")]),e._v(" "),t("p",[e._v("To enable this functionality, "),t("code",[e._v("MQTT_HTTPS_FW_UPDATE")]),e._v(" will need to be defined or the line that defines in in user_config.h will need to be uncommented.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If using an unsecure MQTT broker it is "),t("strong",[e._v("highly recommended")]),e._v(" to disable the password checking by setting the macro "),t("code",[e._v("MQTT_HTTPS_FW_UPDATE_USE_PASSWORD")]),e._v(" to 0 (default is 1 (enabled)), otherwise a clear text password may be sent over the network.")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("server_cert")]),e._v(" parameter is optional. If the update server has changed or certificate updated or not set in "),t("code",[e._v("user_config.h")]),e._v(" then you can provide the certificate here.")])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("The pre-built binaries for "),t("strong",[e._v("rfbridge")]),e._v(" and "),t("strong",[e._v("avatto-bakeey-ir")]),e._v(" have the above WiFi and MQTT broker credentials and the Firmware update via MQTT options disabled. This is due to the restricted available flash, so as to still be able to use OTA firmware updates for these boards.")])]),e._v(" "),t("h1",{attrs:{id:"communication-layers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#communication-layers"}},[e._v("#")]),e._v(" Communication layers")]),e._v(" "),t("h2",{attrs:{id:"mqtt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mqtt"}},[e._v("#")]),e._v(" MQTT")]),e._v(" "),t("p",[e._v("OpenMQTTGateway uses per default MQTT on top of Ethernet or WiFi for communicating (default: true).\nThe MQTT communication can be deactivated with the following command:\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"mqtt":false}\'')]),e._v("\nOnce activated the MQTT API is no longer accessible")]),e._v(" "),t("h2",{attrs:{id:"serial"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#serial"}},[e._v("#")]),e._v(" Serial")]),e._v(" "),t("p",[e._v("Added to MQTT, OpenMQTTGateway cans use Serial to transmit or receive json data (default: false):\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"serial":true}\'')])]),e._v(" "),t("p",[e._v("The build need to have the following macro:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v(" '-DZgatewaySERIAL=\"SERIAL\"'\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("An example scenario is a slave offline ESP32 dedicated to RF decoding connected to another online ESP32 through Serial.")]),e._v(" "),t("h1",{attrs:{id:"indicators"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#indicators"}},[e._v("#")]),e._v(" Indicators")]),e._v(" "),t("h2",{attrs:{id:"change-the-led-indicator-brightness"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-led-indicator-brightness"}},[e._v("#")]),e._v(" Change the LED indicator brightness")]),e._v(" "),t("p",[e._v("Minimum: 0, Maximum: 255, Default defined by DEFAULT_ADJ_BRIGHTNESS")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"brightness":200}\'')])]),e._v(" "),t("h2",{attrs:{id:"understanding-led-indicators-in-openmqttgateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#understanding-led-indicators-in-openmqttgateway"}},[e._v("#")]),e._v(" Understanding LED Indicators in OpenMQTTGateway")]),e._v(" "),t("p",[e._v("With boards having one or several RGB Led, OpenMQTTGateway uses them to provide visual feedback about its current state. This guide will help you interpret these LED signals to understand what's happening with your gateway.")]),e._v(" "),t("h2",{attrs:{id:"led-color-guide"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#led-color-guide"}},[e._v("#")]),e._v(" LED Color Guide")]),e._v(" "),t("p",[e._v("OpenMQTTGateway uses a variety of colors to indicate different states:")]),e._v(" "),t("p",[e._v("Green (0x00FF00): Indicates normal operation or successful connections\nBlue (0x0000FF): Shows processing or offline status\nOrange (0xFFA500): Indicates waiting states or minor issues\nYellow (0xFFFF00): Used during the onboarding process\nRed (0xFF0000): Signals an error state\nMagenta (0xFF00FF): Indicates local Over-The-Air (OTA) updates\nPurple (0x8000FF): Shows remote OTA updates are in progress")]),e._v(" "),t("h2",{attrs:{id:"understanding-gateway-states"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#understanding-gateway-states"}},[e._v("#")]),e._v(" Understanding Gateway States")]),e._v(" "),t("p",[e._v("Here's what different LED behaviors mean:")]),e._v(" "),t("h3",{attrs:{id:"power-on"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#power-on"}},[e._v("#")]),e._v(" Power On")]),e._v(" "),t("p",[e._v("Color: Green\nBehavior: Solid light\nMeaning: The gateway is powered and operational")]),e._v(" "),t("h3",{attrs:{id:"processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#processing"}},[e._v("#")]),e._v(" Processing")]),e._v(" "),t("p",[e._v("Color: Blue\nBehavior: Blinking (3 times)\nMeaning: The gateway is processing data")]),e._v(" "),t("h3",{attrs:{id:"waiting-for-onboarding"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#waiting-for-onboarding"}},[e._v("#")]),e._v(" Waiting for Onboarding")]),e._v(" "),t("p",[e._v("Color: Orange\nBehavior: Solid light\nMeaning: The gateway is ready to be set up")]),e._v(" "),t("h3",{attrs:{id:"onboarding-in-progress"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#onboarding-in-progress"}},[e._v("#")]),e._v(" Onboarding in Progress")]),e._v(" "),t("p",[e._v("Color: Yellow\nBehavior: Solid light\nMeaning: The gateway is being configured")]),e._v(" "),t("h3",{attrs:{id:"network-connected"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#network-connected"}},[e._v("#")]),e._v(" Network Connected")]),e._v(" "),t("p",[e._v("Color: Green\nBehavior: Solid light\nMeaning: Successfully connected to the network")]),e._v(" "),t("h3",{attrs:{id:"network-disconnected"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#network-disconnected"}},[e._v("#")]),e._v(" Network Disconnected")]),e._v(" "),t("p",[e._v("Color: Orange\nBehavior: Blinking\nMeaning: Lost connection to the network")]),e._v(" "),t("h3",{attrs:{id:"mqtt-broker-connected"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mqtt-broker-connected"}},[e._v("#")]),e._v(" MQTT Broker Connected")]),e._v(" "),t("p",[e._v("Color: Green\nBehavior: Solid light\nMeaning: Successfully connected to the MQTT broker")]),e._v(" "),t("h3",{attrs:{id:"mqtt-broker-disconnected"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mqtt-broker-disconnected"}},[e._v("#")]),e._v(" MQTT Broker Disconnected")]),e._v(" "),t("p",[e._v("Color: Orange\nBehavior: Blinking\nMeaning: Lost connection to the MQTT broker")]),e._v(" "),t("h3",{attrs:{id:"offline"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#offline"}},[e._v("#")]),e._v(" Offline")]),e._v(" "),t("p",[e._v("Color: Blue\nBehavior: Blinking\nMeaning: The gateway is offline")]),e._v(" "),t("h3",{attrs:{id:"local-ota-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#local-ota-update"}},[e._v("#")]),e._v(" Local OTA Update")]),e._v(" "),t("p",[e._v("Color: Magenta\nBehavior: Blinking\nMeaning: A local Over-The-Air update is in progress")]),e._v(" "),t("h3",{attrs:{id:"remote-ota-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#remote-ota-update"}},[e._v("#")]),e._v(" Remote OTA Update")]),e._v(" "),t("p",[e._v("Color: Purple\nBehavior: Blinking\nMeaning: A remote Over-The-Air update is in progress")]),e._v(" "),t("h3",{attrs:{id:"error"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#error"}},[e._v("#")]),e._v(" Error")]),e._v(" "),t("p",[e._v("Color: Red\nBehavior: Blinking (3 times)\nMeaning: An error has occurred")]),e._v(" "),t("h3",{attrs:{id:"actuator-on-off"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#actuator-on-off"}},[e._v("#")]),e._v(" Actuator On/Off")]),e._v(" "),t("p",[e._v("Color: Green\nBehavior: Depends on actuator state\nMeaning: Indicates the state of a connected actuator")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{405:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-OTA-Update-Home-Assistant.1b857c45.png"},461:function(e,t,a){"use strict";a.r(t);var s=a(14),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"system-commands-esp-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#system-commands-esp-only"}},[e._v("#")]),e._v(" System commands (ESP only)")]),e._v(" "),t("h2",{attrs:{id:"restart-the-esp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#restart-the-esp"}},[e._v("#")]),e._v(" Restart the ESP")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"cmd":"restart"}\'')])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("With Home Assistant, this command is directly available through MQTT auto discovery as a switch into the HASS OpenMQTTGateway device entities list.")])]),e._v(" "),t("h2",{attrs:{id:"erase-the-esp-settings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#erase-the-esp-settings"}},[e._v("#")]),e._v(" Erase the ESP settings")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"cmd":"erase"}\'')])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("With Home Assistant, this command is directly available through MQTT auto discovery as a switch into the HASS OpenMQTTGateway device entities list.")])]),e._v(" "),t("h2",{attrs:{id:"retrieve-current-status-of-the-esp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#retrieve-current-status-of-the-esp"}},[e._v("#")]),e._v(" Retrieve current status of the ESP")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"cmd":"status"}\'')])]),e._v(" "),t("h2",{attrs:{id:"auto-discovery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#auto-discovery"}},[e._v("#")]),e._v(" Auto discovery")]),e._v(" "),t("p",[e._v("You can deactivate the MQTT auto-discovery function, which enables you to create devices/entities with the Home Assistant convention automatically. This function is set to "),t("code",[e._v("true")]),e._v(" at startup for 30 minutes unless you deactivate it.")]),e._v(" "),t("h3",{attrs:{id:"deactivate"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deactivate"}},[e._v("#")]),e._v(" Deactivate")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"disc":false}\'')])]),e._v(" "),t("h3",{attrs:{id:"activate"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#activate"}},[e._v("#")]),e._v(" Activate")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"disc":true}\'')])]),e._v(" "),t("p",[e._v("If you want the settings to be kept upon gateway restart, you can save the state by adding "),t("code",[e._v('"save":true')]),e._v(" (ESP32 only).\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"disc":false, "save":true}\'')])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("Auto discovery is enabled by default on release binaries and platformio.")])]),e._v(" "),t("h2",{attrs:{id:"activate-offline-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#activate-offline-mode"}},[e._v("#")]),e._v(" Activate Offline mode")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"offline":true,"save":true}\'')])]),e._v(" "),t("h2",{attrs:{id:"change-the-wifi-credentials"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-wifi-credentials"}},[e._v("#")]),e._v(" Change the WiFi credentials")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"wifi_ssid":"ssid", "wifi_pass":"password"}\'')])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If the new connection fails the gateway will fallback to the previous connection.")])]),e._v(" "),t("h2",{attrs:{id:"change-the-gateway-password"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-gateway-password"}},[e._v("#")]),e._v(" Change the gateway password")]),e._v(" "),t("p",[e._v("The password must be 8 characters minimum.")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"gw_pass":"12345678"}\'')])]),e._v(" "),t("h2",{attrs:{id:"change-the-mqtt-broker-credentials"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-mqtt-broker-credentials"}},[e._v("#")]),e._v(" Change the MQTT broker credentials")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m\n\'{\n "mqtt_user": "user_name",\n "mqtt_pass": "password",\n "mqtt_server": "host",\n "mqtt_port": "port",\n "mqtt_validate": false,\n "mqtt_secure": false\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("INFO")]),e._v(" "),t("p",[e._v("By default this function is not available on the pre built binary of RFBridge, in order to have less code size and enable to have OTA update working properly. So as to enable it remove from the rf bridge env:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("build_flags = '-UMQTTsetMQTT'\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If the new connection fails the gateway will fallback to the previous connection.")])]),e._v(" "),t("h2",{attrs:{id:"change-the-mqtt-main-topic-discovery-prefix-and-or-gateway-name"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-mqtt-main-topic-discovery-prefix-and-or-gateway-name"}},[e._v("#")]),e._v(" Change the MQTT main topic, discovery prefix, and or gateway name")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m\n\'{\n "mqtt_topic": "topic/",\n "discovery_prefix": "prefix",\n "gateway_name": "name"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("INFO")]),e._v(" "),t("p",[e._v("This will change the subscribed and published mqtt_topic/gateway_name that the gateway uses. No parameters are mandatory, the current topic or gateway name will be used if not supplied.")])]),e._v(" "),t("h2",{attrs:{id:"switching-brokers-and-using-signed-and-client-certificates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#switching-brokers-and-using-signed-and-client-certificates"}},[e._v("#")]),e._v(" Switching brokers and using signed and client certificates")]),e._v(" "),t("p",[e._v("In the "),t("code",[e._v("user_config.h")]),e._v(" file it is possible to specify multiple MQTT brokers and client certificates.\nAdditionally, support for multiple brokers and client certificates has been added. To use this, it is required that the server certificate, client certificate, and client key are provided as their own constant string value as demonstrated in the file."),t("br"),e._v("\nTo add more than one broker and switch between them it is necessary to provide all of the relevant certificates/keys and add their respective variable names in the "),t("code",[e._v("cnt_parameters_array")]),e._v(" structure, as shown in "),t("code",[e._v("user_config.h")]),e._v("..")]),e._v(" "),t("p",[e._v("To switch between these connections with an MQTT command message, the format is as follows:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m\n\'{\n "mqtt_user": "user",\n "mqtt_pass": "password",\n "mqtt_server": "host",\n "mqtt_port": "port",\n "mqtt_secure": true,\n "mqtt_validate": true,\n "cnt_index":1,\n "save_cnt": true\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("cnt_index")]),e._v(" value corresponds to the 0 to 2 index of the "),t("code",[e._v("cnt_parameters_array")]),e._v(" in "),t("code",[e._v("user_config.h")]),e._v(".\n0 being the default index, containing the onboarding parameters.")])]),e._v(" "),t("p",[e._v("To read the connection parameters:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m\n\'{\n "cnt_index":1,\n "read_cnt": true\n }\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("To test a connection change without saving:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m\n\'{\n "cnt_index":1,\n "test_cnt": true\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If the client can't connect to the MQTT broker corresponding to the current "),t("code",[e._v("cnt_index")]),e._v(", it will increment the index to the next valid connection set and restart with it.")])]),e._v(" "),t("h2",{attrs:{id:"saving-loading-connection-parameters-certificates-at-runtime"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#saving-loading-connection-parameters-certificates-at-runtime"}},[e._v("#")]),e._v(" Saving/Loading connection parameters/certificates at runtime")]),e._v(" "),t("p",[e._v("This chapter details the process for managing certificates/connections parameters used for secure MQTT communication with OpenMQTTGateway")]),e._v(" "),t("h3",{attrs:{id:"storing-and-loading-certificates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#storing-and-loading-certificates"}},[e._v("#")]),e._v(" Storing and Loading Certificates")]),e._v(" "),t("ul",[t("li",[e._v("Flash Memory Storage:\nCertificates can be saved to the flash memory using specific indices. Valid indices for storing certificates are 1 and 2, as 0 is reserved for the default certificate.")]),e._v(" "),t("li",[e._v("RAM Memory Loading:\nCertificates can be loaded from RAM, where valid indices range from 0 to 2. The device publishes a hash of the certificate to the broker to verify its identity. If the connection using the current certificate fails, the device will revert to the previous certificate.")])]),e._v(" "),t("h3",{attrs:{id:"use-case-changing-a-group-of-certificates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#use-case-changing-a-group-of-certificates"}},[e._v("#")]),e._v(" Use Case: Changing a Group of Certificates")]),e._v(" "),t("p",[e._v("When updating certificates, follow these steps to ensure that the new certificates are correctly loaded and used:")]),e._v(" "),t("ol",[t("li",[e._v("Push Certificates via MQTT:\nSend the new certificates one by one through MQTT, using indices 1 or 2. Replace newline characters (\\n) in the certificates with spaces.")])]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"cnt_index"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"mqtt_server_cert"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"-----BEGIN CERTIFICATE----- MIIDQTCC----END CERTIFICATE-----"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])]),t("p",[e._v("Accepted certificates are:")]),e._v(" "),t("ul",[t("li",[t("code",[e._v("mqtt_server_cert")])]),e._v(" "),t("li",[t("code",[e._v("mqtt_client_cert")])]),e._v(" "),t("li",[t("code",[e._v("mqtt_client_key")])]),e._v(" "),t("li",[t("code",[e._v("ota_server_cert")])])]),e._v(" "),t("ol",{attrs:{start:"2"}},[t("li",[e._v("Verify Certificates in RAM:\nAfter pushing the certificates, verify that they have been correctly loaded into RAM.")])]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"cnt_index"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"read_cnt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])]),t("ol",{attrs:{start:"3"}},[t("li",[e._v("Test and Save Certificates:\nOnce verification is complete, test the connection using the new certificates. If the connection is successful, send the command to save the certificates to flash.")])]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"cnt_index"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"save_cnt"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])]),t("ol",{attrs:{start:"4"}},[t("li",[t("p",[e._v("Broker Connection:\nThe broker will attempt to use the newly received certificates for the connection.")])]),e._v(" "),t("li",[t("p",[e._v("Successful Connection Handling:\nIf the connection is successful, the certificates are permanently stored in the flash memory at the specified index.")])]),e._v(" "),t("li",[t("p",[e._v("Handling Connection Failures:\nIf the connection fails, the device will revert to the previously used certificate index, and the new certificates will not be saved.")])])]),e._v(" "),t("h1",{attrs:{id:"firmware-update-from-mqtt-esp-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#firmware-update-from-mqtt-esp-only"}},[e._v("#")]),e._v(" Firmware update from MQTT (ESP only)")]),e._v(" "),t("p",[e._v("When the gateway used is from a standard ESP32 environment "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/development/environments.ini",target:"_blank",rel:"noopener noreferrer"}},[e._v("listed and defined here"),t("OutboundLink")],1),e._v(", it can be updated through a simple MQTT command:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway_ESP32_BLE/commands/MQTTtoSYS/firmware_update" -m \'{\n "version": "latest"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br")])]),t("p",[e._v("This would download the latest version firmware binary from Github and install it.\nIt can be used with version 1.5.0 and above.")]),e._v(" "),t("p",[e._v("Note that this update option is also autodiscovered through Home Assistant convention, you can update directly from the device page with 2 clicks.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(405),alt:"Home Assistant OTA Update"}})]),e._v(" "),t("p",[e._v("You can also indicate the target version to update:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway_ESP32_BLE/commands/MQTTtoSYS/firmware_update" -m \'{\n "version": "v1.2.0"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br")])]),t("p",[e._v("OpenMQTTGateway checks at start and every hour if an update is available.")]),e._v(" "),t("p",[e._v("Alternatively if you want to choose the update URL you can use the command below (ESP32 and ESP8266):")]),e._v(" "),t("p",[e._v("Without certificate, in this case the gateway will use the ota_server_cert certificate defined in default_ota_cert.h")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway_ESP32_BLE/commands/MQTTtoSYS/firmware_update" -m \'{\n "version": "test",\n "password": "OTAPASSWORD",\n "url": "https://github.com/1technophile/OpenMQTTGateway/releases/download/v0.9.12/esp32dev-ble-firmware.bin"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("With certificate (replace the \\n in the certificate by spaces to publish it easily):")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway_ESP32_BLE/commands/MQTTtoSYS/firmware_update" -m \'{\n "version": "test",\n "password": "OTAPASSWORD",\n "url": "https://github.com/1technophile/OpenMQTTGateway/releases/download/v0.9.12/esp32dev-ble-firmware.bin",\n "ota_server_cert": "-----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE-----"}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("A bash script is available "),t("a",{attrs:{href:"ota_command_cert.zip"}},[e._v("here also")]),e._v(" to simplify the use of the "),t("code",[e._v("server_cert")]),e._v(" parameter.")]),e._v(" "),t("p",[e._v("Alternatively the OTA certificate can also be saved with the cnt_index for future use:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway_ESP32_BLE/commands/MQTTtoSYS/config" -m \'{\n "cnt_index": 1,\n "save_cnt":true,\n "ota_server_cert": "-----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE-----"\n}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br")])]),t("p",[e._v("The other connection parameters corresponding to the index need to be valid for the save function to work. This command will switch to connection parameters of index 1.")]),e._v(" "),t("p",[e._v("To enable this functionality, "),t("code",[e._v("MQTT_HTTPS_FW_UPDATE")]),e._v(" will need to be defined or the line that defines in in user_config.h will need to be uncommented.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If using an unsecure MQTT broker it is "),t("strong",[e._v("highly recommended")]),e._v(" to disable the password checking by setting the macro "),t("code",[e._v("MQTT_HTTPS_FW_UPDATE_USE_PASSWORD")]),e._v(" to 0 (default is 1 (enabled)), otherwise a clear text password may be sent over the network.")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("server_cert")]),e._v(" parameter is optional. If the update server has changed or certificate updated or not set in "),t("code",[e._v("user_config.h")]),e._v(" then you can provide the certificate here.")])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("The pre-built binaries for "),t("strong",[e._v("rfbridge")]),e._v(" and "),t("strong",[e._v("avatto-bakeey-ir")]),e._v(" have the above WiFi and MQTT broker credentials and the Firmware update via MQTT options disabled. This is due to the restricted available flash, so as to still be able to use OTA firmware updates for these boards.")])]),e._v(" "),t("h1",{attrs:{id:"communication-layers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#communication-layers"}},[e._v("#")]),e._v(" Communication layers")]),e._v(" "),t("h2",{attrs:{id:"mqtt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mqtt"}},[e._v("#")]),e._v(" MQTT")]),e._v(" "),t("p",[e._v("OpenMQTTGateway uses per default MQTT on top of Ethernet or WiFi for communicating (default: true).\nThe MQTT communication can be deactivated with the following command:\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"mqtt":false}\'')]),e._v("\nOnce activated the MQTT API is no longer accessible")]),e._v(" "),t("h2",{attrs:{id:"serial"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#serial"}},[e._v("#")]),e._v(" Serial")]),e._v(" "),t("p",[e._v("Added to MQTT, OpenMQTTGateway cans use Serial to transmit or receive json data (default: false):\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"serial":true}\'')])]),e._v(" "),t("p",[e._v("The build need to have the following macro:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v(" '-DZgatewaySERIAL=\"SERIAL\"'\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("An example scenario is a slave offline ESP32 dedicated to RF decoding connected to another online ESP32 through Serial.")]),e._v(" "),t("h1",{attrs:{id:"indicators"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#indicators"}},[e._v("#")]),e._v(" Indicators")]),e._v(" "),t("h2",{attrs:{id:"change-the-led-indicator-brightness"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-the-led-indicator-brightness"}},[e._v("#")]),e._v(" Change the LED indicator brightness")]),e._v(" "),t("p",[e._v("Minimum: 0, Maximum: 255, Default defined by DEFAULT_ADJ_BRIGHTNESS")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"brightness":200}\'')])]),e._v(" "),t("h2",{attrs:{id:"understanding-led-indicators-in-openmqttgateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#understanding-led-indicators-in-openmqttgateway"}},[e._v("#")]),e._v(" Understanding LED Indicators in OpenMQTTGateway")]),e._v(" "),t("p",[e._v("With boards having one or several RGB Led, OpenMQTTGateway uses them to provide visual feedback about its current state. This guide will help you interpret these LED signals to understand what's happening with your gateway.")]),e._v(" "),t("h2",{attrs:{id:"led-color-guide"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#led-color-guide"}},[e._v("#")]),e._v(" LED Color Guide")]),e._v(" "),t("p",[e._v("OpenMQTTGateway uses a variety of colors to indicate different states:")]),e._v(" "),t("p",[e._v("Green (0x00FF00): Indicates normal operation or successful connections\nBlue (0x0000FF): Shows processing or offline status\nOrange (0xFFA500): Indicates waiting states or minor issues\nYellow (0xFFFF00): Used during the onboarding process\nRed (0xFF0000): Signals an error state\nMagenta (0xFF00FF): Indicates local Over-The-Air (OTA) updates\nPurple (0x8000FF): Shows remote OTA updates are in progress")]),e._v(" "),t("h2",{attrs:{id:"understanding-gateway-states"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#understanding-gateway-states"}},[e._v("#")]),e._v(" Understanding Gateway States")]),e._v(" "),t("p",[e._v("Here's what different LED behaviors mean:")]),e._v(" "),t("h3",{attrs:{id:"power-on"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#power-on"}},[e._v("#")]),e._v(" Power On")]),e._v(" "),t("p",[e._v("Color: Green\nBehavior: Solid light\nMeaning: The gateway is powered and operational")]),e._v(" "),t("h3",{attrs:{id:"processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#processing"}},[e._v("#")]),e._v(" Processing")]),e._v(" "),t("p",[e._v("Color: Blue\nBehavior: Blinking (3 times)\nMeaning: The gateway is processing data")]),e._v(" "),t("h3",{attrs:{id:"waiting-for-onboarding"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#waiting-for-onboarding"}},[e._v("#")]),e._v(" Waiting for Onboarding")]),e._v(" "),t("p",[e._v("Color: Orange\nBehavior: Solid light\nMeaning: The gateway is ready to be set up")]),e._v(" "),t("h3",{attrs:{id:"onboarding-in-progress"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#onboarding-in-progress"}},[e._v("#")]),e._v(" Onboarding in Progress")]),e._v(" "),t("p",[e._v("Color: Yellow\nBehavior: Solid light\nMeaning: The gateway is being configured")]),e._v(" "),t("h3",{attrs:{id:"network-connected"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#network-connected"}},[e._v("#")]),e._v(" Network Connected")]),e._v(" "),t("p",[e._v("Color: Green\nBehavior: Solid light\nMeaning: Successfully connected to the network")]),e._v(" "),t("h3",{attrs:{id:"network-disconnected"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#network-disconnected"}},[e._v("#")]),e._v(" Network Disconnected")]),e._v(" "),t("p",[e._v("Color: Orange\nBehavior: Blinking\nMeaning: Lost connection to the network")]),e._v(" "),t("h3",{attrs:{id:"mqtt-broker-connected"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mqtt-broker-connected"}},[e._v("#")]),e._v(" MQTT Broker Connected")]),e._v(" "),t("p",[e._v("Color: Green\nBehavior: Solid light\nMeaning: Successfully connected to the MQTT broker")]),e._v(" "),t("h3",{attrs:{id:"mqtt-broker-disconnected"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mqtt-broker-disconnected"}},[e._v("#")]),e._v(" MQTT Broker Disconnected")]),e._v(" "),t("p",[e._v("Color: Orange\nBehavior: Blinking\nMeaning: Lost connection to the MQTT broker")]),e._v(" "),t("h3",{attrs:{id:"offline"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#offline"}},[e._v("#")]),e._v(" Offline")]),e._v(" "),t("p",[e._v("Color: Blue\nBehavior: Blinking\nMeaning: The gateway is offline")]),e._v(" "),t("h3",{attrs:{id:"local-ota-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#local-ota-update"}},[e._v("#")]),e._v(" Local OTA Update")]),e._v(" "),t("p",[e._v("Color: Magenta\nBehavior: Blinking\nMeaning: A local Over-The-Air update is in progress")]),e._v(" "),t("h3",{attrs:{id:"remote-ota-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#remote-ota-update"}},[e._v("#")]),e._v(" Remote OTA Update")]),e._v(" "),t("p",[e._v("Color: Purple\nBehavior: Blinking\nMeaning: A remote Over-The-Air update is in progress")]),e._v(" "),t("h3",{attrs:{id:"error"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#error"}},[e._v("#")]),e._v(" Error")]),e._v(" "),t("p",[e._v("Color: Red\nBehavior: Blinking (3 times)\nMeaning: An error has occurred")]),e._v(" "),t("h3",{attrs:{id:"actuator-on-off"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#actuator-on-off"}},[e._v("#")]),e._v(" Actuator On/Off")]),e._v(" "),t("p",[e._v("Color: Green\nBehavior: Depends on actuator state\nMeaning: Indicates the state of a connected actuator")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/46.10af5185.js b/dev/assets/js/46.a3d8b6f4.js similarity index 99% rename from dev/assets/js/46.10af5185.js rename to dev/assets/js/46.a3d8b6f4.js index 36aa8e96..bbc0ef56 100644 --- a/dev/assets/js/46.10af5185.js +++ b/dev/assets/js/46.a3d8b6f4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{409:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial3.296590cd.jpg"},463:function(e,t,a){"use strict";a.r(t);var s=a(14),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ir-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ir-gateway"}},[e._v("#")]),e._v(" IR gateway")]),e._v(" "),t("p",[e._v("There is two methods for finding the IR codes you want to replicate:")]),e._v(" "),t("ol",[t("li",[e._v("Point the remote control to an IR receiver see "),t("a",{attrs:{href:"#receiving-data-from-ir-signal"}},[e._v("Receiving data from IR signal")]),e._v(" & "),t("a",{attrs:{href:"#send-data-by-mqtt-to-convert-it-on-ir-signal"}},[e._v("Send data by MQTT to convert it on IR signal")])]),e._v(" "),t("li",[e._v("Find the code corresponding to your devices with IR global cache database https://irdb.globalcache.com/ see "),t("a",{attrs:{href:"#send-data-by-mqtt-from-global-cach%C3%A9-database-to-convert-it-on-ir-signal"}},[e._v("Send data by MQTT from Global cache database to convert it on IR signal")])])]),e._v(" "),t("p",[e._v("Here is the "),t("a",{attrs:{href:"https://docs.google.com/spreadsheets/d/1rTDZIG8rm0dSf4vP7HdTdM4-aRY1nDWH4jK28_WRwHQ/edit?usp=sharing",target:"_blank",rel:"noopener noreferrer"}},[e._v("List of protocols"),t("OutboundLink")],1),e._v(" supported by OMG, even if your device brand is not in the list you can still use raw IR data or GlobalCache database.")]),e._v(" "),t("h2",{attrs:{id:"receiving-data-from-ir-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-ir-signal"}},[e._v("#")]),e._v(" Receiving data from IR signal")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:\n"),t("code",[e._v("mosquitto_sub -t +/# -v")]),e._v("\nAnd press your IR remote control in front of the receiver led you should see the following messages for example:")]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[e._v("home/OpenMQTTGateway/IRtoMQTT "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("875849879")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol_name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v("SAMSUNG"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"bits"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("32")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"raw"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"4534,4432,612,518,614,516,616,1618,618,1616,618,512,618,1618,608,524,612,518,616,514,618,512,616,1618,616,1618,618,514,616,1618,616,514,616,514,618,512,616,1618,618,1618,618,514,610,1622,616,514,618,514,614,516,616,1618,618,512,618,512,618,1616,550,580,618,1616,612,1624,618,1616,618"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("With an hexadecimal value:")]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("9938405643")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("55")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"bits"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("35")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"hex"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0x25060090B"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol_name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"TECO"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("To receive big dump of raw data you need first to modify the "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/091b317660fd201a30e2cd0e15424a13c5a6bd71/config_IR.h#L41",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_IR.h"),t("OutboundLink")],1),e._v(" and uncomment DumpMode true")]),e._v(" "),t("p",[e._v("Unknown protocols are filtered by default, if you want to see the unknown protocols set into "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/master/config_IR.h",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_IR.h"),t("OutboundLink")],1),e._v(" "),t("code",[e._v("#define pubIRunknownPrtcl true")]),e._v(" instead of false")]),e._v(" "),t("p",[t("img",{attrs:{src:a(409),alt:"IR serial"}})]),e._v(" "),t("p",[e._v("You can take this code and try to reproduce it with the gateway either by using "),t("a",{attrs:{href:"#send-data-by-mqtt-to-convert-it-on-ir-signal"}},[e._v("decimal value")]),e._v(" or the "),t("a",{attrs:{href:"#send-raw-ir-data-by-mqtt"}},[e._v("raw value")]),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"send-data-by-mqtt-to-convert-it-on-ir-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-ir-signal"}},[e._v("#")]),e._v(" Send data by MQTT to convert it on IR signal")]),e._v(" "),t("p",[e._v("With the IR gateway you need to put on the topic the protocol_name you want to use to send the signal, the different protocols implemented are "),t("a",{attrs:{href:"https://github.com/crankyoldgit/IRremoteESP8266/blob/f9d7e5c622670132731e3f9c64d9132128eb320c/src/IRremoteESP8266.h#L299",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("Exhaustive list "),t("a",{attrs:{href:"https://docs.google.com/spreadsheets/d/1_5fQjAixzRtepkykmL-3uN3G5bLfQ0zMajM9OBZ1bx0/edit#gid=1910001295",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("For example if I want to send a command to a Sony TV you can use the following command:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"value":551489775,"protocol_name":"SONY"}\'')])]),e._v(" "),t("p",[e._v("The code after the -m represent the payload you want to send.")]),e._v(" "),t("p",[e._v("You could alternatively use an hex value (bits is the number of hexadecimal values):\n"),t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"hex":"0x250600090B","bits":5,"protocol_name":"TECO"}\'')])]),e._v(" "),t("p",[e._v("or")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"hex":"0xA6BCF20040600020000000000519","bits":14,"protocol_name":"HAIER_AC_YRW02"}\'')])]),e._v(" "),t("p",[e._v("If you don’t want to use special parameters for IR just use value key, the protocol per default is NEC")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m '{\"value\":551489775}'")])]),e._v(" "),t("p",[e._v("NOTE: on Arduino Uno most of the protocols are not enable per default due to memory constraints (it is not the case for MEGA), to enable them go to "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/master/main/User_config.h",target:"_blank",rel:"noopener noreferrer"}},[e._v("User_config.h"),t("OutboundLink")],1),e._v(" and uncomment the #define corresponding the protocols you want:")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_COOLIX")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_Whynter")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_LG")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_Sony")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_DISH")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_RC5")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_Sharp")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("define")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token macro-name"}},[e._v("IR_SAMSUNG")])]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br")])]),t("h2",{attrs:{id:"send-data-by-mqtt-from-global-cache-database-to-convert-it-on-ir-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-from-global-cache-database-to-convert-it-on-ir-signal"}},[e._v("#")]),e._v(" Send data by MQTT from Global Caché database to convert it on IR signal")]),e._v(" "),t("p",[e._v("The website https://irdb.globalcache.com/ contains an important database of IR codes of various devices brand. By registering and asking the code you will receive a code as the example below:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("code1: sendir,1:1,1,38000,1,69,340,169,20,20,20,20,20,64,20,20,20,20,20,20,20,20,20,20,20,64,20,64,20,20,20,64,20,64,20,64,20,64,20,64,20,64,20,64,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,64,20,64,20,64,20,64,20,64,20,64,20,1544,340,85,20,3663\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("Extract this part of the code:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("38000,1,69,340,169,20,20,20,20,20,64,20,20,20,20,20,20,20,20,20,20,20,64,20,64,20,20,20,64,20,64,20,64,20,64,20,64,20,64,20,64,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,64,20,64,20,64,20,64,20,64,20,64,20,1544,340,85,20,3663\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("and publish it to MQTT with the subject containing IR_GC:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"raw":"38000,1,1,171,171,21,64,21,21,21,21,21,21,21,21,21,21,21,21,21,64,21,64,21,21,21,21,21,21,21,21,21,21,21,21,21,64,21,21,21,21,21,21,21,64,21,21,21,21,21,21,21,21,21,64,21,64,21,64,21,21,21,64,21,64,21,64,21,64,21,1114","protocol_name":"GC"}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("You should be able to command your devices without having listened with the IR receiver or if your protocol is unknown by the IRremote library")]),e._v(" "),t("h2",{attrs:{id:"send-data-by-mqtt-with-advanced-ir-parameters"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-with-advanced-ir-parameters"}},[e._v("#")]),e._v(" Send data by MQTT with advanced IR parameters")]),e._v(" "),t("p",[e._v("IR sending support two advanced parameters; bits length and repeat number.")]),e._v(" "),t("p",[e._v("The example below will send the following advanced parameters bits: 14 and repeat:4 times for a Sony protocol:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"value":551489775,"protocol_name":"NEC","repeat":4,"bits":14}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("h2",{attrs:{id:"send-raw-ir-data-by-mqtt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-raw-ir-data-by-mqtt"}},[e._v("#")]),e._v(" Send raw IR data by MQTT")]),e._v(" "),t("p",[e._v("Publish your code like below")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"raw":"8850,4450,600,550,550,550,600,1600,600,550,600,500,600,500,600,550,600,500,600,1650,600,1600,600,550,600,1600,600,1650,600,1600,600,1650,600,1600,600,550,600,500,600,550,550,1650,600,500,600,550,600,500,600,550,550,1650,600,1650,550,1650,600,550,550,1650,600,1650,550,1650,600,1650,600","protocol_name":"Raw"}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("With big raw array you may cross the limit of default payload size. In this case the gateway will not receive the message or will not send it to the broker.\nIn this case the best way is to use hex values instead, but if you can't you may change the parameters below:\nIn User_config.h replace:")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("define")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token macro-name"}},[e._v("JSON_MSG_BUFFER")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token number"}},[e._v("512")])])]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("by")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("define")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token macro-name"}},[e._v("JSON_MSG_BUFFER")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1280")])])]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("h2",{attrs:{id:"repeat-the-ir-signal-openmqttgateway-receive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repeat-the-ir-signal-openmqttgateway-receive"}},[e._v("#")]),e._v(" Repeat the IR signal OpenMQTTGateway receive")]),e._v(" "),t("p",[e._v("So as to repeat the IR signal received by the gateway once set the following parameter to true in "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/091b317660fd201a30e2cd0e15424a13c5a6bd71/config_IR.h#L37",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_IR.h"),t("OutboundLink")],1),e._v(" "),t("code",[e._v("#define repeatIRwMQTT true")])]),e._v(" "),t("h2",{attrs:{id:"raw-ir-signal-forwarding"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#raw-ir-signal-forwarding"}},[e._v("#")]),e._v(" Raw IR signal forwarding")]),e._v(" "),t("p",[e._v("So as to repeat the raw IR signal received by the gateway, uncomment and set the following parameter to true in "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/091b317660fd201a30e2cd0e15424a13c5a6bd71/config_IR.h#L39",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_IR.h"),t("OutboundLink")],1),e._v(" "),t("code",[e._v("#define RawDirectForward true")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{408:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial3.296590cd.jpg"},463:function(e,t,a){"use strict";a.r(t);var s=a(14),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ir-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ir-gateway"}},[e._v("#")]),e._v(" IR gateway")]),e._v(" "),t("p",[e._v("There is two methods for finding the IR codes you want to replicate:")]),e._v(" "),t("ol",[t("li",[e._v("Point the remote control to an IR receiver see "),t("a",{attrs:{href:"#receiving-data-from-ir-signal"}},[e._v("Receiving data from IR signal")]),e._v(" & "),t("a",{attrs:{href:"#send-data-by-mqtt-to-convert-it-on-ir-signal"}},[e._v("Send data by MQTT to convert it on IR signal")])]),e._v(" "),t("li",[e._v("Find the code corresponding to your devices with IR global cache database https://irdb.globalcache.com/ see "),t("a",{attrs:{href:"#send-data-by-mqtt-from-global-cach%C3%A9-database-to-convert-it-on-ir-signal"}},[e._v("Send data by MQTT from Global cache database to convert it on IR signal")])])]),e._v(" "),t("p",[e._v("Here is the "),t("a",{attrs:{href:"https://docs.google.com/spreadsheets/d/1rTDZIG8rm0dSf4vP7HdTdM4-aRY1nDWH4jK28_WRwHQ/edit?usp=sharing",target:"_blank",rel:"noopener noreferrer"}},[e._v("List of protocols"),t("OutboundLink")],1),e._v(" supported by OMG, even if your device brand is not in the list you can still use raw IR data or GlobalCache database.")]),e._v(" "),t("h2",{attrs:{id:"receiving-data-from-ir-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-ir-signal"}},[e._v("#")]),e._v(" Receiving data from IR signal")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:\n"),t("code",[e._v("mosquitto_sub -t +/# -v")]),e._v("\nAnd press your IR remote control in front of the receiver led you should see the following messages for example:")]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[e._v("home/OpenMQTTGateway/IRtoMQTT "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("875849879")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol_name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v("SAMSUNG"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"bits"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("32")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"raw"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"4534,4432,612,518,614,516,616,1618,618,1616,618,512,618,1618,608,524,612,518,616,514,618,512,616,1618,616,1618,618,514,616,1618,616,514,616,514,618,512,616,1618,618,1618,618,514,610,1622,616,514,618,514,614,516,616,1618,618,512,618,512,618,1616,550,580,618,1616,612,1624,618,1616,618"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("With an hexadecimal value:")]),e._v(" "),t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("9938405643")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("55")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"bits"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("35")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"hex"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0x25060090B"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"protocol_name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"TECO"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("To receive big dump of raw data you need first to modify the "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/091b317660fd201a30e2cd0e15424a13c5a6bd71/config_IR.h#L41",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_IR.h"),t("OutboundLink")],1),e._v(" and uncomment DumpMode true")]),e._v(" "),t("p",[e._v("Unknown protocols are filtered by default, if you want to see the unknown protocols set into "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/master/config_IR.h",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_IR.h"),t("OutboundLink")],1),e._v(" "),t("code",[e._v("#define pubIRunknownPrtcl true")]),e._v(" instead of false")]),e._v(" "),t("p",[t("img",{attrs:{src:a(408),alt:"IR serial"}})]),e._v(" "),t("p",[e._v("You can take this code and try to reproduce it with the gateway either by using "),t("a",{attrs:{href:"#send-data-by-mqtt-to-convert-it-on-ir-signal"}},[e._v("decimal value")]),e._v(" or the "),t("a",{attrs:{href:"#send-raw-ir-data-by-mqtt"}},[e._v("raw value")]),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"send-data-by-mqtt-to-convert-it-on-ir-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-ir-signal"}},[e._v("#")]),e._v(" Send data by MQTT to convert it on IR signal")]),e._v(" "),t("p",[e._v("With the IR gateway you need to put on the topic the protocol_name you want to use to send the signal, the different protocols implemented are "),t("a",{attrs:{href:"https://github.com/crankyoldgit/IRremoteESP8266/blob/f9d7e5c622670132731e3f9c64d9132128eb320c/src/IRremoteESP8266.h#L299",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("Exhaustive list "),t("a",{attrs:{href:"https://docs.google.com/spreadsheets/d/1_5fQjAixzRtepkykmL-3uN3G5bLfQ0zMajM9OBZ1bx0/edit#gid=1910001295",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("For example if I want to send a command to a Sony TV you can use the following command:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"value":551489775,"protocol_name":"SONY"}\'')])]),e._v(" "),t("p",[e._v("The code after the -m represent the payload you want to send.")]),e._v(" "),t("p",[e._v("You could alternatively use an hex value (bits is the number of hexadecimal values):\n"),t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"hex":"0x250600090B","bits":5,"protocol_name":"TECO"}\'')])]),e._v(" "),t("p",[e._v("or")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"hex":"0xA6BCF20040600020000000000519","bits":14,"protocol_name":"HAIER_AC_YRW02"}\'')])]),e._v(" "),t("p",[e._v("If you don’t want to use special parameters for IR just use value key, the protocol per default is NEC")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m '{\"value\":551489775}'")])]),e._v(" "),t("p",[e._v("NOTE: on Arduino Uno most of the protocols are not enable per default due to memory constraints (it is not the case for MEGA), to enable them go to "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/master/main/User_config.h",target:"_blank",rel:"noopener noreferrer"}},[e._v("User_config.h"),t("OutboundLink")],1),e._v(" and uncomment the #define corresponding the protocols you want:")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_COOLIX")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_Whynter")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_LG")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_Sony")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_DISH")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_RC5")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//#define IR_Sharp")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("define")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token macro-name"}},[e._v("IR_SAMSUNG")])]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br")])]),t("h2",{attrs:{id:"send-data-by-mqtt-from-global-cache-database-to-convert-it-on-ir-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-from-global-cache-database-to-convert-it-on-ir-signal"}},[e._v("#")]),e._v(" Send data by MQTT from Global Caché database to convert it on IR signal")]),e._v(" "),t("p",[e._v("The website https://irdb.globalcache.com/ contains an important database of IR codes of various devices brand. By registering and asking the code you will receive a code as the example below:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("code1: sendir,1:1,1,38000,1,69,340,169,20,20,20,20,20,64,20,20,20,20,20,20,20,20,20,20,20,64,20,64,20,20,20,64,20,64,20,64,20,64,20,64,20,64,20,64,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,64,20,64,20,64,20,64,20,64,20,64,20,1544,340,85,20,3663\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("Extract this part of the code:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("38000,1,69,340,169,20,20,20,20,20,64,20,20,20,20,20,20,20,20,20,20,20,64,20,64,20,20,20,64,20,64,20,64,20,64,20,64,20,64,20,64,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,64,20,64,20,64,20,64,20,64,20,64,20,1544,340,85,20,3663\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("and publish it to MQTT with the subject containing IR_GC:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"raw":"38000,1,1,171,171,21,64,21,21,21,21,21,21,21,21,21,21,21,21,21,64,21,64,21,21,21,21,21,21,21,21,21,21,21,21,21,64,21,21,21,21,21,21,21,64,21,21,21,21,21,21,21,21,21,64,21,64,21,64,21,21,21,64,21,64,21,64,21,64,21,1114","protocol_name":"GC"}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("You should be able to command your devices without having listened with the IR receiver or if your protocol is unknown by the IRremote library")]),e._v(" "),t("h2",{attrs:{id:"send-data-by-mqtt-with-advanced-ir-parameters"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-with-advanced-ir-parameters"}},[e._v("#")]),e._v(" Send data by MQTT with advanced IR parameters")]),e._v(" "),t("p",[e._v("IR sending support two advanced parameters; bits length and repeat number.")]),e._v(" "),t("p",[e._v("The example below will send the following advanced parameters bits: 14 and repeat:4 times for a Sony protocol:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"value":551489775,"protocol_name":"NEC","repeat":4,"bits":14}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("h2",{attrs:{id:"send-raw-ir-data-by-mqtt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-raw-ir-data-by-mqtt"}},[e._v("#")]),e._v(" Send raw IR data by MQTT")]),e._v(" "),t("p",[e._v("Publish your code like below")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoIR -m \'{"raw":"8850,4450,600,550,550,550,600,1600,600,550,600,500,600,500,600,550,600,500,600,1650,600,1600,600,550,600,1600,600,1650,600,1600,600,1650,600,1600,600,550,600,500,600,550,550,1650,600,500,600,550,600,500,600,550,550,1650,600,1650,550,1650,600,550,550,1650,600,1650,550,1650,600,1650,600","protocol_name":"Raw"}\'\n')])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("With big raw array you may cross the limit of default payload size. In this case the gateway will not receive the message or will not send it to the broker.\nIn this case the best way is to use hex values instead, but if you can't you may change the parameters below:\nIn User_config.h replace:")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("define")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token macro-name"}},[e._v("JSON_MSG_BUFFER")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token number"}},[e._v("512")])])]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("p",[e._v("by")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[t("span",{pre:!0,attrs:{class:"token macro property"}},[t("span",{pre:!0,attrs:{class:"token directive-hash"}},[e._v("#")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token directive keyword"}},[e._v("define")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token macro-name"}},[e._v("JSON_MSG_BUFFER")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1280")])])]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),t("h2",{attrs:{id:"repeat-the-ir-signal-openmqttgateway-receive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repeat-the-ir-signal-openmqttgateway-receive"}},[e._v("#")]),e._v(" Repeat the IR signal OpenMQTTGateway receive")]),e._v(" "),t("p",[e._v("So as to repeat the IR signal received by the gateway once set the following parameter to true in "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/091b317660fd201a30e2cd0e15424a13c5a6bd71/config_IR.h#L37",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_IR.h"),t("OutboundLink")],1),e._v(" "),t("code",[e._v("#define repeatIRwMQTT true")])]),e._v(" "),t("h2",{attrs:{id:"raw-ir-signal-forwarding"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#raw-ir-signal-forwarding"}},[e._v("#")]),e._v(" Raw IR signal forwarding")]),e._v(" "),t("p",[e._v("So as to repeat the raw IR signal received by the gateway, uncomment and set the following parameter to true in "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/091b317660fd201a30e2cd0e15424a13c5a6bd71/config_IR.h#L39",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_IR.h"),t("OutboundLink")],1),e._v(" "),t("code",[e._v("#define RawDirectForward true")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/49.be3c6616.js b/dev/assets/js/49.c03deaf6.js similarity index 97% rename from dev/assets/js/49.be3c6616.js rename to dev/assets/js/49.c03deaf6.js index 26109a33..7f7e6490 100644 --- a/dev/assets/js/49.be3c6616.js +++ b/dev/assets/js/49.c03deaf6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{433:function(e,t,r){"use strict";r.r(t);var o=r(14),a=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"adding-protocols"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-protocols"}},[e._v("#")]),e._v(" Adding protocols")]),e._v(" "),t("p",[e._v("Adding your device protocol to OpenMQTTGateway enables it to increase interoperability and to create new use cases with your device. Below you will find some guidance to do that.")]),e._v(" "),t("h2",{attrs:{id:"rf-or-ir"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rf-or-ir"}},[e._v("#")]),e._v(" RF or IR")]),e._v(" "),t("p",[e._v("For adding RF and IR protocols to OpenMQTTGateway the best way is to do a pull request to "),t("a",{attrs:{href:"https://github.com/1technophile/rc-switch",target:"_blank",rel:"noopener noreferrer"}},[e._v("RCSwitch"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://github.com/pilight/pilight",target:"_blank",rel:"noopener noreferrer"}},[e._v("Pilight"),t("OutboundLink")],1),e._v(" for RF, and "),t("a",{attrs:{href:"https://github.com/crankyoldgit/IRremoteESP8266",target:"_blank",rel:"noopener noreferrer"}},[e._v("IRRemoteESP8266"),t("OutboundLink")],1),e._v(" for IR.")]),e._v(" "),t("h2",{attrs:{id:"ble"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ble"}},[e._v("#")]),e._v(" BLE")]),e._v(" "),t("p",[e._v("For BLE message decoding OpenMQTTGateway uses the "),t("a",{attrs:{href:"https://decoder.theengs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs Decoder"),t("OutboundLink")],1),e._v(" library. New device decoder pull requests can be submitted directly to the "),t("a",{attrs:{href:"https://github.com/theengs/decoder",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub repository"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Currently we support the reading of advertizing BLE devices, advertizing means that the BLE device broadcasts regularly its sensor data without the need of a BLE connection.")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{430:function(e,t,r){"use strict";r.r(t);var o=r(14),a=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"adding-protocols"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-protocols"}},[e._v("#")]),e._v(" Adding protocols")]),e._v(" "),t("p",[e._v("Adding your device protocol to OpenMQTTGateway enables it to increase interoperability and to create new use cases with your device. Below you will find some guidance to do that.")]),e._v(" "),t("h2",{attrs:{id:"rf-or-ir"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rf-or-ir"}},[e._v("#")]),e._v(" RF or IR")]),e._v(" "),t("p",[e._v("For adding RF and IR protocols to OpenMQTTGateway the best way is to do a pull request to "),t("a",{attrs:{href:"https://github.com/1technophile/rc-switch",target:"_blank",rel:"noopener noreferrer"}},[e._v("RCSwitch"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://github.com/pilight/pilight",target:"_blank",rel:"noopener noreferrer"}},[e._v("Pilight"),t("OutboundLink")],1),e._v(" for RF, and "),t("a",{attrs:{href:"https://github.com/crankyoldgit/IRremoteESP8266",target:"_blank",rel:"noopener noreferrer"}},[e._v("IRRemoteESP8266"),t("OutboundLink")],1),e._v(" for IR.")]),e._v(" "),t("h2",{attrs:{id:"ble"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ble"}},[e._v("#")]),e._v(" BLE")]),e._v(" "),t("p",[e._v("For BLE message decoding OpenMQTTGateway uses the "),t("a",{attrs:{href:"https://decoder.theengs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs Decoder"),t("OutboundLink")],1),e._v(" library. New device decoder pull requests can be submitted directly to the "),t("a",{attrs:{href:"https://github.com/theengs/decoder",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub repository"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Currently we support the reading of advertizing BLE devices, advertizing means that the BLE device broadcasts regularly its sensor data without the need of a BLE connection.")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/50.df420363.js b/dev/assets/js/50.1767f2fa.js similarity index 93% rename from dev/assets/js/50.df420363.js rename to dev/assets/js/50.1767f2fa.js index 13ecc9ee..691bb729 100644 --- a/dev/assets/js/50.df420363.js +++ b/dev/assets/js/50.1767f2fa.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{432:function(t,e,n){"use strict";n.r(e);var a=n(14),o=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"community-participation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#community-participation"}},[t._v("#")]),t._v(" Community participation")]),t._v(" "),e("p",[t._v("The first entry step for participating to OMG is sharing and discussing with the "),e("a",{attrs:{href:"https://community.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[t._v("community"),e("OutboundLink")],1),t._v(", by sharing your experiences and answering to other questions you are giving back what the others gave to you.")]),t._v(" "),e("p",[t._v("You can use the forum to ask questions, post answers, suggest features and discuss about home automation or Internet of things in a more general way.")])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{433:function(t,e,n){"use strict";n.r(e);var a=n(14),o=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"community-participation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#community-participation"}},[t._v("#")]),t._v(" Community participation")]),t._v(" "),e("p",[t._v("The first entry step for participating to OMG is sharing and discussing with the "),e("a",{attrs:{href:"https://community.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[t._v("community"),e("OutboundLink")],1),t._v(", by sharing your experiences and answering to other questions you are giving back what the others gave to you.")]),t._v(" "),e("p",[t._v("You can use the forum to ask questions, post answers, suggest features and discuss about home automation or Internet of things in a more general way.")])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/51.8c9d8fa9.js b/dev/assets/js/51.91585bcb.js similarity index 99% rename from dev/assets/js/51.8c9d8fa9.js rename to dev/assets/js/51.91585bcb.js index 488c6eab..aac9c727 100644 --- a/dev/assets/js/51.8c9d8fa9.js +++ b/dev/assets/js/51.91585bcb.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{436:function(e,t,n){"use strict";n.r(t);var a=n(14),r=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"development-contributions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#development-contributions"}},[e._v("#")]),e._v(" Development contributions")]),e._v(" "),t("p",[e._v("We like pull requests from everyone. By participating in this project, you\nagree to follow the code of conduct below")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/master/CODE_OF_CONDUCT.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("code of conduct"),t("OutboundLink")],1)]),e._v(" "),t("p",[t("a",{attrs:{href:"https://google.github.io/styleguide/cppguide.html#Formatting",target:"_blank",rel:"noopener noreferrer"}},[e._v("code style guide"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v('So as to format automatically your document you have to add the "clang-Format" extension to VSCode, once done, you can format the code by doing a right click into the code file window and clicking "Format document".')]),e._v(" "),t("p",[e._v("Fork the "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/tree/development",target:"_blank",rel:"noopener noreferrer"}},[e._v("development branch"),t("OutboundLink")],1),e._v(", then clone the repo")]),e._v(" "),t("p",[e._v("Make your modification,")]),e._v(" "),t("ul",[t("li",[e._v("If you want to add a new gateway, name it "),t("code",[e._v("ZgatewayXXX")]),e._v(", "),t("code",[e._v("XXX")]),e._v(" replaced by your gateway communication type, can be more than three letters")]),e._v(" "),t("li",[e._v("If you want to add a new sensor, name it "),t("code",[e._v("ZsensorYYY")]),e._v(", "),t("code",[e._v("YYY")]),e._v(" replaced by your sensor type, can be more than three letters")]),e._v(" "),t("li",[e._v("If you want to add a new actuator, name it "),t("code",[e._v("ZactuatorZZZ")]),e._v(", "),t("code",[e._v("ZZZ")]),e._v(" replaced by your actuator type, can be more than three letters")])]),e._v(" "),t("p",[e._v("Review your code, compile it for ESP32 and ESP8266")]),e._v(" "),t("p",[e._v("Test it locally on your hardware config")]),e._v(" "),t("p",[e._v("Emit a pull request")]),e._v(" "),t("p",[e._v("Verify the GitHub Actions CI compilation results")]),e._v(" "),t("p",[e._v("Request for review")]),e._v(" "),t("p",[e._v("We may suggest some changes, improvements or alternatives.")]),e._v(" "),t("p",[e._v("Some things that will increase the chance that your pull request is accepted:")]),e._v(" "),t("ul",[t("li",[e._v("Comment your code,")]),e._v(" "),t("li",[e._v("Ask eventually for design guidelines,")]),e._v(" "),t("li",[e._v("Write a "),t("a",{attrs:{href:"http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("good commit message"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"nightly-builds"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#nightly-builds"}},[e._v("#")]),e._v(" Nightly builds")]),e._v(" "),t("p",[e._v("Nightly builds can be found "),t("a",{attrs:{href:"https://docs.openmqttgateway.com/dev/upload/web-install.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(" for testing purposes only.\nThey are generated from the development branch nightly or from a particular pull request upon request.")]),e._v(" "),t("h2",{attrs:{id:"developer-certificate-of-origin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#developer-certificate-of-origin"}},[e._v("#")]),e._v(" Developer Certificate Of Origin")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v(" By making a contribution to this project, I certify that:\n\n (a) The contribution was created in whole or in part by me and I\n have the right to submit it under the open source license\n indicated in the file; or\n\n (b) The contribution is based upon previous work that, to the best\n of my knowledge, is covered under an appropriate open source\n license and I have the right under that license to submit that\n work with modifications, whether created in whole or in part\n by me, under the same open source license (unless I am\n permitted to submit under a different license), as indicated\n in the file; or\n\n (c) The contribution was provided directly to me by some other\n person who certified (a), (b) or (c) and I have not modified\n it.\n\n (d) I understand and agree that this project and the contribution\n are public and that a record of the contribution (including all\n personal information I submit with it, including my sign-off) is\n maintained indefinitely and may be redistributed consistent with\n this project or the open source license(s) involved.\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br"),t("span",{staticClass:"line-number"},[e._v("12")]),t("br"),t("span",{staticClass:"line-number"},[e._v("13")]),t("br"),t("span",{staticClass:"line-number"},[e._v("14")]),t("br"),t("span",{staticClass:"line-number"},[e._v("15")]),t("br"),t("span",{staticClass:"line-number"},[e._v("16")]),t("br"),t("span",{staticClass:"line-number"},[e._v("17")]),t("br"),t("span",{staticClass:"line-number"},[e._v("18")]),t("br"),t("span",{staticClass:"line-number"},[e._v("19")]),t("br"),t("span",{staticClass:"line-number"},[e._v("20")]),t("br"),t("span",{staticClass:"line-number"},[e._v("21")]),t("br"),t("span",{staticClass:"line-number"},[e._v("22")]),t("br"),t("span",{staticClass:"line-number"},[e._v("23")]),t("br")])]),t("p",[e._v("This Developer Certificate Of Origin (DCO) was adopted on June 7, 2021.")]),e._v(" "),t("p",[e._v("The text of this license is available under the "),t("a",{attrs:{href:"http://creativecommons.org/licenses/by-sa/3.0/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Creative Commons Attribution-ShareAlike 3.0 Unported License"),t("OutboundLink")],1),e._v(". It is based on the Linux "),t("a",{attrs:{href:"http://elinux.org/Developer_Certificate_Of_Origin",target:"_blank",rel:"noopener noreferrer"}},[e._v("Developer Certificate Of Origin"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("To accept the DCO it is required to put a x between [ ] on "),t("code",[e._v("[ ] I accept the DCO")]),e._v(" in the PR template when submitting it. The [ ] is an opt-in box, so you have to manually accept it.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{434:function(e,t,n){"use strict";n.r(t);var a=n(14),r=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"development-contributions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#development-contributions"}},[e._v("#")]),e._v(" Development contributions")]),e._v(" "),t("p",[e._v("We like pull requests from everyone. By participating in this project, you\nagree to follow the code of conduct below")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/master/CODE_OF_CONDUCT.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("code of conduct"),t("OutboundLink")],1)]),e._v(" "),t("p",[t("a",{attrs:{href:"https://google.github.io/styleguide/cppguide.html#Formatting",target:"_blank",rel:"noopener noreferrer"}},[e._v("code style guide"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v('So as to format automatically your document you have to add the "clang-Format" extension to VSCode, once done, you can format the code by doing a right click into the code file window and clicking "Format document".')]),e._v(" "),t("p",[e._v("Fork the "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/tree/development",target:"_blank",rel:"noopener noreferrer"}},[e._v("development branch"),t("OutboundLink")],1),e._v(", then clone the repo")]),e._v(" "),t("p",[e._v("Make your modification,")]),e._v(" "),t("ul",[t("li",[e._v("If you want to add a new gateway, name it "),t("code",[e._v("ZgatewayXXX")]),e._v(", "),t("code",[e._v("XXX")]),e._v(" replaced by your gateway communication type, can be more than three letters")]),e._v(" "),t("li",[e._v("If you want to add a new sensor, name it "),t("code",[e._v("ZsensorYYY")]),e._v(", "),t("code",[e._v("YYY")]),e._v(" replaced by your sensor type, can be more than three letters")]),e._v(" "),t("li",[e._v("If you want to add a new actuator, name it "),t("code",[e._v("ZactuatorZZZ")]),e._v(", "),t("code",[e._v("ZZZ")]),e._v(" replaced by your actuator type, can be more than three letters")])]),e._v(" "),t("p",[e._v("Review your code, compile it for ESP32 and ESP8266")]),e._v(" "),t("p",[e._v("Test it locally on your hardware config")]),e._v(" "),t("p",[e._v("Emit a pull request")]),e._v(" "),t("p",[e._v("Verify the GitHub Actions CI compilation results")]),e._v(" "),t("p",[e._v("Request for review")]),e._v(" "),t("p",[e._v("We may suggest some changes, improvements or alternatives.")]),e._v(" "),t("p",[e._v("Some things that will increase the chance that your pull request is accepted:")]),e._v(" "),t("ul",[t("li",[e._v("Comment your code,")]),e._v(" "),t("li",[e._v("Ask eventually for design guidelines,")]),e._v(" "),t("li",[e._v("Write a "),t("a",{attrs:{href:"http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("good commit message"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"nightly-builds"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#nightly-builds"}},[e._v("#")]),e._v(" Nightly builds")]),e._v(" "),t("p",[e._v("Nightly builds can be found "),t("a",{attrs:{href:"https://docs.openmqttgateway.com/dev/upload/web-install.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(" for testing purposes only.\nThey are generated from the development branch nightly or from a particular pull request upon request.")]),e._v(" "),t("h2",{attrs:{id:"developer-certificate-of-origin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#developer-certificate-of-origin"}},[e._v("#")]),e._v(" Developer Certificate Of Origin")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v(" By making a contribution to this project, I certify that:\n\n (a) The contribution was created in whole or in part by me and I\n have the right to submit it under the open source license\n indicated in the file; or\n\n (b) The contribution is based upon previous work that, to the best\n of my knowledge, is covered under an appropriate open source\n license and I have the right under that license to submit that\n work with modifications, whether created in whole or in part\n by me, under the same open source license (unless I am\n permitted to submit under a different license), as indicated\n in the file; or\n\n (c) The contribution was provided directly to me by some other\n person who certified (a), (b) or (c) and I have not modified\n it.\n\n (d) I understand and agree that this project and the contribution\n are public and that a record of the contribution (including all\n personal information I submit with it, including my sign-off) is\n maintained indefinitely and may be redistributed consistent with\n this project or the open source license(s) involved.\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br"),t("span",{staticClass:"line-number"},[e._v("12")]),t("br"),t("span",{staticClass:"line-number"},[e._v("13")]),t("br"),t("span",{staticClass:"line-number"},[e._v("14")]),t("br"),t("span",{staticClass:"line-number"},[e._v("15")]),t("br"),t("span",{staticClass:"line-number"},[e._v("16")]),t("br"),t("span",{staticClass:"line-number"},[e._v("17")]),t("br"),t("span",{staticClass:"line-number"},[e._v("18")]),t("br"),t("span",{staticClass:"line-number"},[e._v("19")]),t("br"),t("span",{staticClass:"line-number"},[e._v("20")]),t("br"),t("span",{staticClass:"line-number"},[e._v("21")]),t("br"),t("span",{staticClass:"line-number"},[e._v("22")]),t("br"),t("span",{staticClass:"line-number"},[e._v("23")]),t("br")])]),t("p",[e._v("This Developer Certificate Of Origin (DCO) was adopted on June 7, 2021.")]),e._v(" "),t("p",[e._v("The text of this license is available under the "),t("a",{attrs:{href:"http://creativecommons.org/licenses/by-sa/3.0/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Creative Commons Attribution-ShareAlike 3.0 Unported License"),t("OutboundLink")],1),e._v(". It is based on the Linux "),t("a",{attrs:{href:"http://elinux.org/Developer_Certificate_Of_Origin",target:"_blank",rel:"noopener noreferrer"}},[e._v("Developer Certificate Of Origin"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("To accept the DCO it is required to put a x between [ ] on "),t("code",[e._v("[ ] I accept the DCO")]),e._v(" in the PR template when submitting it. The [ ] is an opt-in box, so you have to manually accept it.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/52.08fbfe1b.js b/dev/assets/js/52.0ad86cbd.js similarity index 97% rename from dev/assets/js/52.08fbfe1b.js rename to dev/assets/js/52.0ad86cbd.js index 5f17333d..c86c1413 100644 --- a/dev/assets/js/52.08fbfe1b.js +++ b/dev/assets/js/52.0ad86cbd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{434:function(e,t,r){"use strict";r.r(t);var o=r(14),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"supporting-the-project"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supporting-the-project"}},[e._v("#")]),e._v(" Supporting the project")]),e._v(" "),t("p",[e._v("If you like the project and/or used it please consider supporting it! It can be done in different ways:")]),e._v(" "),t("ul",[t("li",[e._v("Purchase the "),t("a",{attrs:{href:"https://app.theengs.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs mobile application"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Purchase the "),t("a",{attrs:{href:"https://shop.theengs.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs plug"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Helping other users in the "),t("a",{attrs:{href:"https://community.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("community"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"development"}},[e._v("Contribute")]),e._v(" to the "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway",target:"_blank",rel:"noopener noreferrer"}},[e._v("code"),t("OutboundLink")],1),e._v(" or the "),t("a",{attrs:{href:"https://docs.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("documentation"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Buy devices, boards or parts from the "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("compatible web site"),t("OutboundLink")],1),e._v(", the devices and parts linked use affiliated links.")]),e._v(" "),t("li",[e._v("Donate or sponsor the project "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/graphs/contributors",target:"_blank",rel:"noopener noreferrer"}},[e._v("developers"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Make a video or a blog article about what you have done with "),t("a",{attrs:{href:"https://docs.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenMQTTGateway"),t("OutboundLink")],1),e._v(" and share it.")])]),e._v(" "),t("p",[e._v("Support open-source development through sponsorship and gain exclusive access to our private forum. Your questions, issues, and feature requests will receive priority attention, plus you'll gain insider access to our roadmap.")]),e._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("iframe",{staticStyle:{border:"0","border-radius":"6px"},attrs:{src:"https://github.com/sponsors/theengs/button",title:"Sponsor Theengs",height:"32",width:"228"}})])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{436:function(e,t,r){"use strict";r.r(t);var o=r(14),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"supporting-the-project"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#supporting-the-project"}},[e._v("#")]),e._v(" Supporting the project")]),e._v(" "),t("p",[e._v("If you like the project and/or used it please consider supporting it! It can be done in different ways:")]),e._v(" "),t("ul",[t("li",[e._v("Purchase the "),t("a",{attrs:{href:"https://app.theengs.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs mobile application"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Purchase the "),t("a",{attrs:{href:"https://shop.theengs.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs plug"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Helping other users in the "),t("a",{attrs:{href:"https://community.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("community"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"development"}},[e._v("Contribute")]),e._v(" to the "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway",target:"_blank",rel:"noopener noreferrer"}},[e._v("code"),t("OutboundLink")],1),e._v(" or the "),t("a",{attrs:{href:"https://docs.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("documentation"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Buy devices, boards or parts from the "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("compatible web site"),t("OutboundLink")],1),e._v(", the devices and parts linked use affiliated links.")]),e._v(" "),t("li",[e._v("Donate or sponsor the project "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/graphs/contributors",target:"_blank",rel:"noopener noreferrer"}},[e._v("developers"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Make a video or a blog article about what you have done with "),t("a",{attrs:{href:"https://docs.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenMQTTGateway"),t("OutboundLink")],1),e._v(" and share it.")])]),e._v(" "),t("p",[e._v("Support open-source development through sponsorship and gain exclusive access to our private forum. Your questions, issues, and feature requests will receive priority attention, plus you'll gain insider access to our roadmap.")]),e._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("iframe",{staticStyle:{border:"0","border-radius":"6px"},attrs:{src:"https://github.com/sponsors/theengs/button",title:"Sponsor Theengs",height:"32",width:"228"}})])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/60.7e3979c2.js b/dev/assets/js/60.8c063eb3.js similarity index 99% rename from dev/assets/js/60.7e3979c2.js rename to dev/assets/js/60.8c063eb3.js index 33a91194..d82026db 100644 --- a/dev/assets/js/60.7e3979c2.js +++ b/dev/assets/js/60.8c063eb3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{455:function(e,t,o){"use strict";o.r(t);var r=o(14),n=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"troubleshooting"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[e._v("#")]),e._v(" Troubleshooting")]),e._v(" "),t("h2",{attrs:{id:"compilation-build-error"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#compilation-build-error"}},[e._v("#")]),e._v(" Compilation/build error")]),e._v(" "),t("p",[e._v("This badge "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/actions?query=branch%3Amaster+workflow%3ABuild",target:"_blank",rel:"noopener noreferrer"}},[t("img",{attrs:{src:"https://github.com/1technophile/OpenMQTTGateway/workflows/Build/badge.svg?branch=master",alt:"Build Status"}}),t("OutboundLink")],1),e._v(" show you the state of the compilation of the master and this one "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/actions?query=branch%3Adevelopment+workflow%3ABuild",target:"_blank",rel:"noopener noreferrer"}},[t("img",{attrs:{src:"https://github.com/1technophile/OpenMQTTGateway/workflows/Build/badge.svg?branch=development",alt:"Build Status"}}),t("OutboundLink")],1),e._v(" for the development branch.\nIf you see a green badge this means that the code compilation is OK with the configuration given in the "),t("code",[e._v("docs/platformio.ini")]),e._v(".\nCheck your environment, boards , libraries before submitting an issue or a question.")]),e._v(" "),t("h2",{attrs:{id:"esp32-compilation-errors-related-to-wifi"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#esp32-compilation-errors-related-to-wifi"}},[e._v("#")]),e._v(" ESP32 compilation errors related to WiFi")]),e._v(" "),t("p",[e._v("If you get one or several of the following errors:")]),e._v(" "),t("p",[t("code",[e._v("error: 'WIFI_STA' was not declared in this scope")])]),e._v(" "),t("p",[t("code",[e._v("error: 'class WiFiClass' has no member named 'mode'")])]),e._v(" "),t("p",[t("code",[e._v("error: no matching function for call to 'WiFiClass::macAddress()")])]),e._v(" "),t("p",[e._v("You have a conflict between Arduino default WiFi library and ESP32 one. So as to resolve this issue you should move or remove the Arduino WiFi library (Arduino Sketchbook folder\\libraries\\WiFi) in order to enable the IDE to take the one from ESP32 (Arduino Sketchbook folder\\hardware\\espressif\\arduino-esp32\\libraries\\WiFi)\nMore info on "),t("a",{attrs:{href:"https://community.openmqttgateway.com/t/esp32-compilation-error/144/5?u=1technophile",target:"_blank",rel:"noopener noreferrer"}},[e._v("this topic"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"not-able-to-send-or-receive-rf-or-ir"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#not-able-to-send-or-receive-rf-or-ir"}},[e._v("#")]),e._v(" Not able to send or receive RF or IR")]),e._v(" "),t("p",[e._v("→ Verify your power supply voltage with a multimeter, it should be 5V (can be 12V for FS1000A emitter), please note that on NodeMCU V3 the Vin does not supply 5V contrary to NodeMCU V1")]),e._v(" "),t("p",[e._v("→ Verify your wiring")]),e._v(" "),t("p",[e._v("→ To eliminate issues of OpenMQTTGateway or you home controller try uploading basic examples from the libraries directly (like "),t("a",{attrs:{href:"https://github.com/sui77/rc-switch/tree/master/examples/SendDemo",target:"_blank",rel:"noopener noreferrer"}},[e._v("SendDemo"),t("OutboundLink")],1),e._v(" for RF or IRSendDemo for IR) and execute them. If it doesn't work this means that you have mostly an issue related with your hardware or due to IDE/library version used.")]),e._v(" "),t("p",[e._v("Regarding the IR led emitter you can replace it with a normal led and see if it lights up when you send an MQTT command")]),e._v(" "),t("p",[e._v("→ If you are only unable to receive RF on nodemcu (or if it only works when a serial connection is active):")]),e._v(" "),t("p",[e._v("try with D2 instead of D3\nand put\n"),t("code",[e._v("#define RF_RECEIVER_GPIO 4 // D2 on nodemcu")]),e._v("\nin config_rf.h\ninstead of\n"),t("code",[e._v("#define RF_RECEIVER_GPIO 0 // D3 on nodemcu")])]),e._v(" "),t("h2",{attrs:{id:"repetitive-mqtt-disconnections-or-and-commands-sent-to-the-gateway-not-taken-into-account"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repetitive-mqtt-disconnections-or-and-commands-sent-to-the-gateway-not-taken-into-account"}},[e._v("#")]),e._v(" Repetitive MQTT disconnections or/and commands sent to the gateway not taken into account")]),e._v(" "),t("p",[e._v("Most probably a network issue, don't use a guest network and if going through a firewall check its rules. To put aside gateway issue, try to connect to a local broker on the same network.")]),e._v(" "),t("h2",{attrs:{id:"omg-ignores-messages-sent-to-it-via-mqtt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#omg-ignores-messages-sent-to-it-via-mqtt"}},[e._v("#")]),e._v(" OMG ignores messages sent to it via MQTT")]),e._v(" "),t("p",[e._v("This can happen if the messages are too big and exceed the internal buffer size limit. To fix this, check the size of the message you're sending (in bytes). Next, open "),t("code",[e._v("User_config.h")]),e._v(" and set "),t("code",[e._v("mqtt_max_payload_size")]),e._v(" to be greater than that size, e.g.:\n"),t("code",[e._v("#define mqtt_max_payload_size 1024")])]),e._v(" "),t("h2",{attrs:{id:"esp-continuous-restart-or-strange-behaviour"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#esp-continuous-restart-or-strange-behaviour"}},[e._v("#")]),e._v(" ESP Continuous restart or strange behaviour:")]),e._v(" "),t("p",[e._v("This can be due to corruption of the ESP flash memory, try to erase flash and upload OMG on it again.")]),e._v(" "),t("p",[e._v("If you didn't find your answer here post a question to the forum:\n"),t("a",{attrs:{href:"https://community.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[t("img",{attrs:{src:"https://img.shields.io/badge/community-forum-brightgreen.svg",alt:"Community forum"}}),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"esp-does-not-connect-to-broker-with-tls-enabled"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#esp-does-not-connect-to-broker-with-tls-enabled"}},[e._v("#")]),e._v(" ESP does not connect to broker with TLS enabled")]),e._v(" "),t("p",[e._v("If you get the following error:\n"),t("code",[e._v("W: failed, ssl error code=54")]),e._v(' ("Certificate is expired or not yet valid.")')]),e._v(" "),t("p",[e._v("This is most probable caused by the time of the esp is not correct/synchronized.\nThe esp uses the Network Time Protocol (NTP) to get the current time from a time server.\nIf you get this error ntp is not configured correctly in the gateway.\nUncomment "),t("code",[e._v('//# define NTP_SERVER "pool.ntp.org"')]),e._v(" to set the "),t("code",[e._v("pool.ntp.org")]),e._v(" as the time server.\nYou can also choose any other ntp time server you like.")]),e._v(" "),t("p",[e._v("It is normal that the time synchronization process takes some time and the MQTT connection will not be successful the first time.\nIf you set the ntp server for the gateway and keep getting the errors you should check your certificate validity duration.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{454:function(e,t,o){"use strict";o.r(t);var r=o(14),n=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"troubleshooting"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[e._v("#")]),e._v(" Troubleshooting")]),e._v(" "),t("h2",{attrs:{id:"compilation-build-error"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#compilation-build-error"}},[e._v("#")]),e._v(" Compilation/build error")]),e._v(" "),t("p",[e._v("This badge "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/actions?query=branch%3Amaster+workflow%3ABuild",target:"_blank",rel:"noopener noreferrer"}},[t("img",{attrs:{src:"https://github.com/1technophile/OpenMQTTGateway/workflows/Build/badge.svg?branch=master",alt:"Build Status"}}),t("OutboundLink")],1),e._v(" show you the state of the compilation of the master and this one "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/actions?query=branch%3Adevelopment+workflow%3ABuild",target:"_blank",rel:"noopener noreferrer"}},[t("img",{attrs:{src:"https://github.com/1technophile/OpenMQTTGateway/workflows/Build/badge.svg?branch=development",alt:"Build Status"}}),t("OutboundLink")],1),e._v(" for the development branch.\nIf you see a green badge this means that the code compilation is OK with the configuration given in the "),t("code",[e._v("docs/platformio.ini")]),e._v(".\nCheck your environment, boards , libraries before submitting an issue or a question.")]),e._v(" "),t("h2",{attrs:{id:"esp32-compilation-errors-related-to-wifi"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#esp32-compilation-errors-related-to-wifi"}},[e._v("#")]),e._v(" ESP32 compilation errors related to WiFi")]),e._v(" "),t("p",[e._v("If you get one or several of the following errors:")]),e._v(" "),t("p",[t("code",[e._v("error: 'WIFI_STA' was not declared in this scope")])]),e._v(" "),t("p",[t("code",[e._v("error: 'class WiFiClass' has no member named 'mode'")])]),e._v(" "),t("p",[t("code",[e._v("error: no matching function for call to 'WiFiClass::macAddress()")])]),e._v(" "),t("p",[e._v("You have a conflict between Arduino default WiFi library and ESP32 one. So as to resolve this issue you should move or remove the Arduino WiFi library (Arduino Sketchbook folder\\libraries\\WiFi) in order to enable the IDE to take the one from ESP32 (Arduino Sketchbook folder\\hardware\\espressif\\arduino-esp32\\libraries\\WiFi)\nMore info on "),t("a",{attrs:{href:"https://community.openmqttgateway.com/t/esp32-compilation-error/144/5?u=1technophile",target:"_blank",rel:"noopener noreferrer"}},[e._v("this topic"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"not-able-to-send-or-receive-rf-or-ir"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#not-able-to-send-or-receive-rf-or-ir"}},[e._v("#")]),e._v(" Not able to send or receive RF or IR")]),e._v(" "),t("p",[e._v("→ Verify your power supply voltage with a multimeter, it should be 5V (can be 12V for FS1000A emitter), please note that on NodeMCU V3 the Vin does not supply 5V contrary to NodeMCU V1")]),e._v(" "),t("p",[e._v("→ Verify your wiring")]),e._v(" "),t("p",[e._v("→ To eliminate issues of OpenMQTTGateway or you home controller try uploading basic examples from the libraries directly (like "),t("a",{attrs:{href:"https://github.com/sui77/rc-switch/tree/master/examples/SendDemo",target:"_blank",rel:"noopener noreferrer"}},[e._v("SendDemo"),t("OutboundLink")],1),e._v(" for RF or IRSendDemo for IR) and execute them. If it doesn't work this means that you have mostly an issue related with your hardware or due to IDE/library version used.")]),e._v(" "),t("p",[e._v("Regarding the IR led emitter you can replace it with a normal led and see if it lights up when you send an MQTT command")]),e._v(" "),t("p",[e._v("→ If you are only unable to receive RF on nodemcu (or if it only works when a serial connection is active):")]),e._v(" "),t("p",[e._v("try with D2 instead of D3\nand put\n"),t("code",[e._v("#define RF_RECEIVER_GPIO 4 // D2 on nodemcu")]),e._v("\nin config_rf.h\ninstead of\n"),t("code",[e._v("#define RF_RECEIVER_GPIO 0 // D3 on nodemcu")])]),e._v(" "),t("h2",{attrs:{id:"repetitive-mqtt-disconnections-or-and-commands-sent-to-the-gateway-not-taken-into-account"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repetitive-mqtt-disconnections-or-and-commands-sent-to-the-gateway-not-taken-into-account"}},[e._v("#")]),e._v(" Repetitive MQTT disconnections or/and commands sent to the gateway not taken into account")]),e._v(" "),t("p",[e._v("Most probably a network issue, don't use a guest network and if going through a firewall check its rules. To put aside gateway issue, try to connect to a local broker on the same network.")]),e._v(" "),t("h2",{attrs:{id:"omg-ignores-messages-sent-to-it-via-mqtt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#omg-ignores-messages-sent-to-it-via-mqtt"}},[e._v("#")]),e._v(" OMG ignores messages sent to it via MQTT")]),e._v(" "),t("p",[e._v("This can happen if the messages are too big and exceed the internal buffer size limit. To fix this, check the size of the message you're sending (in bytes). Next, open "),t("code",[e._v("User_config.h")]),e._v(" and set "),t("code",[e._v("mqtt_max_payload_size")]),e._v(" to be greater than that size, e.g.:\n"),t("code",[e._v("#define mqtt_max_payload_size 1024")])]),e._v(" "),t("h2",{attrs:{id:"esp-continuous-restart-or-strange-behaviour"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#esp-continuous-restart-or-strange-behaviour"}},[e._v("#")]),e._v(" ESP Continuous restart or strange behaviour:")]),e._v(" "),t("p",[e._v("This can be due to corruption of the ESP flash memory, try to erase flash and upload OMG on it again.")]),e._v(" "),t("p",[e._v("If you didn't find your answer here post a question to the forum:\n"),t("a",{attrs:{href:"https://community.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[t("img",{attrs:{src:"https://img.shields.io/badge/community-forum-brightgreen.svg",alt:"Community forum"}}),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"esp-does-not-connect-to-broker-with-tls-enabled"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#esp-does-not-connect-to-broker-with-tls-enabled"}},[e._v("#")]),e._v(" ESP does not connect to broker with TLS enabled")]),e._v(" "),t("p",[e._v("If you get the following error:\n"),t("code",[e._v("W: failed, ssl error code=54")]),e._v(' ("Certificate is expired or not yet valid.")')]),e._v(" "),t("p",[e._v("This is most probable caused by the time of the esp is not correct/synchronized.\nThe esp uses the Network Time Protocol (NTP) to get the current time from a time server.\nIf you get this error ntp is not configured correctly in the gateway.\nUncomment "),t("code",[e._v('//# define NTP_SERVER "pool.ntp.org"')]),e._v(" to set the "),t("code",[e._v("pool.ntp.org")]),e._v(" as the time server.\nYou can also choose any other ntp time server you like.")]),e._v(" "),t("p",[e._v("It is normal that the time synchronization process takes some time and the MQTT connection will not be successful the first time.\nIf you set the ntp server for the gateway and keep getting the errors you should check your certificate validity duration.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/63.3d464d1d.js b/dev/assets/js/63.118c24b3.js similarity index 99% rename from dev/assets/js/63.3d464d1d.js rename to dev/assets/js/63.118c24b3.js index 5bcbe8e6..927ce49d 100644 --- a/dev/assets/js/63.3d464d1d.js +++ b/dev/assets/js/63.118c24b3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{459:function(e,t,a){"use strict";a.r(t);var s=a(14),i=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"displays"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#displays"}},[e._v("#")]),e._v(" Displays")]),e._v(" "),t("h2",{attrs:{id:"ssd1306-display-heltec-sx127x-lilygo®-lora32-boards-generic-ssd1306-displays"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ssd1306-display-heltec-sx127x-lilygo®-lora32-boards-generic-ssd1306-displays"}},[e._v("#")]),e._v(" SSD1306 Display (Heltec SX127X, LILYGO® LoRa32 boards, generic SSD1306 displays)")]),e._v(" "),t("p",[e._v("Several options are available for the display of information on the SSD1306 display. Some options are exclusive to each other, and when a different option is enabled, the current option is disabled.")]),e._v(" "),t("p",[e._v("The current SSD1306 display states are being published to the "),t("code",[e._v("SSD1306toMQTT")]),e._v(" topic, e.g.")]),e._v(" "),t("p",[t("code",[e._v('{"onstate":true,"brightness":50,"display-flip":true,"idlelogo":true,"log-oled":false,"json-oled":true}')])]),e._v(" "),t("h3",{attrs:{id:"display-on-off"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#display-on-off"}},[e._v("#")]),e._v(" Display ON/OFF")]),e._v(" "),t("p",[e._v("To turn the SSD1306 display on or off.")]),e._v(" "),t("p",[e._v("This can be enabled with the compiler directive "),t("code",[e._v("-DDISPLAY_STATE=true")]),e._v(".")]),e._v(" "),t("p",[e._v("MQTT Display OFF command:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m {"onstate":false}')])]),e._v(" "),t("p",[e._v("MQTT Display ON command:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m {"onstate":true}')])]),e._v(" "),t("h4",{attrs:{id:"usage-of-a-touch-gpio-display-blanking"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#usage-of-a-touch-gpio-display-blanking"}},[e._v("#")]),e._v(" Usage of a touch GPIO display blanking")]),e._v(" "),t("p",[e._v("Support can be enabled to use a GPIO pin as a simple touch sensor to enable the display. When enabled, the display will blank after 30 seconds, and when GPIO 2 is touched, the display will enable for 30 seconds. For testing a wire was connected to the GPIO pin.")]),e._v(" "),t("p",[e._v("This can be enabled with the compiler directive "),t("code",[e._v("-DDISPLAY_BLANKING=true")])]),e._v(" "),t("p",[e._v("Blanking Compiler Directives")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Directive")]),e._v(" "),t("th",[e._v("Default")]),e._v(" "),t("th",[e._v("Description")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("DISPLAY_BLANKING")]),e._v(" "),t("td",[e._v("false")]),e._v(" "),t("td",[e._v("Enables touch based display blanking")])]),e._v(" "),t("tr",[t("td",[e._v("DISPLAY_BLANKING_TOUCH_GPIO")]),e._v(" "),t("td",[e._v("2")]),e._v(" "),t("td",[e._v("GPIO pin to use the touch. Must be a touch supported GPIO pin")])]),e._v(" "),t("tr",[t("td",[e._v("DISPLAY_BLANKING_START")]),e._v(" "),t("td",[e._v("30")]),e._v(" "),t("td",[e._v("Seconds to wait before disabling the display")])])])]),e._v(" "),t("h3",{attrs:{id:"brightness"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#brightness"}},[e._v("#")]),e._v(" Brightness")]),e._v(" "),t("p",[e._v("The display brightness can be set between 0-100%.")]),e._v(" "),t("p",[e._v("It is recommended to set a value lower than 100 to extend the life of the OLED display. The default setting is 50.")]),e._v(" "),t("p",[e._v("This can be set with the compiler directive "),t("code",[e._v("-DDISPLAY_BRIGHTNESS=50")]),e._v(".")]),e._v(" "),t("p",[e._v("or with the runtime command")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m {"brightness":50}')])]),e._v(" "),t("h3",{attrs:{id:"metric-or-imperial-property-units"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#metric-or-imperial-property-units"}},[e._v("#")]),e._v(" Metric or Imperial property units")]),e._v(" "),t("p",[e._v("To have applicable device properties displayed in Imperial units, e.g. °F for temperature.")]),e._v(" "),t("p",[e._v("This can be set with the compiler directive "),t("code",[e._v("-DDISPLAY_METRIC=false")]),e._v(".")]),e._v(" "),t("p",[e._v("As the display Metric setting is being defined in the WebUI part of OpenMQTTGateway changes need to be sent there with the runtime command")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoWebUI/config -m {"displayMetric":false}')])]),e._v(" "),t("h3",{attrs:{id:"rotating-the-display-by-180-degrees"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rotating-the-display-by-180-degrees"}},[e._v("#")]),e._v(" Rotating the display by 180 degrees")]),e._v(" "),t("p",[e._v("This can be set with the compiler directive "),t("code",[e._v("-DDISPLAY_FLIP=false")]),e._v(".")]),e._v(" "),t("p",[e._v("or with the runtime command")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m {"display-flip":false}')])]),e._v(" "),t("h3",{attrs:{id:"display-idle-logo"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#display-idle-logo"}},[e._v("#")]),e._v(" Display idle Logo")]),e._v(" "),t("p",[e._v("To display the OpenMQTTGateway logo during device display idle time. This reduces the likelihood of burn-in.")]),e._v(" "),t("p",[e._v("This can be set with the compiler directive "),t("code",[e._v("-DDISPLAY_IDLE_LOGO=true")]),e._v(".")]),e._v(" "),t("p",[e._v("or at runtime with")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m {"idlelogo":true}')])]),e._v(" "),t("h3",{attrs:{id:"setting-the-log-output"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-log-output"}},[e._v("#")]),e._v(" Setting the log output")]),e._v(" "),t("p",[e._v("The display of serial log messages to the display can be enabled via compiler directive "),t("code",[e._v("-DLOG_TO_OLED=true")]),e._v(" or via MQTT commands.")]),e._v(" "),t("p",[e._v("For example if you want to set the serial log to OLED")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"log-oled\":true}'")])]),e._v(" "),t("p",[e._v("you can also revert it back with")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"log-oled\":false}'")])]),e._v(" "),t("p",[e._v("The log level of the messages displayed is Errors and Warnings, and this can only be changed via the compiler directive "),t("code",[e._v("-DLOG_LEVEL_OLED=LOG_LEVEL_NOTICE")]),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"displaying-module-json-messages-default"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#displaying-module-json-messages-default"}},[e._v("#")]),e._v(" Displaying Module json messages (default)")]),e._v(" "),t("p",[e._v("The display of messages from various modules is also supported. Currently supported modules include "),t("code",[e._v("ZgatewayRTL_433")]),e._v(", "),t("code",[e._v("ZgatewayBT")]),e._v(" and "),t("code",[e._v("ZsensorBME280")]),e._v(".")]),e._v(" "),t("p",[e._v("This can be enabled with the compiler directive "),t("code",[e._v("-DJSON_TO_OLED=true")]),e._v(".")]),e._v(" "),t("p",[e._v("You can also change it by MQTT. For example if you want to display module json messages:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"json-oled\":true}'")])]),e._v(" "),t("p",[e._v("And to disable the display of module json messages:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"display-json\":false}'")])]),e._v(" "),t("h3",{attrs:{id:"store-the-current-display-configuration-in-the-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#store-the-current-display-configuration-in-the-gateway"}},[e._v("#")]),e._v(" Store the current display configuration in the gateway")]),e._v(" "),t("p",[e._v("To store the running display configuration into non-volatile storage on the gateway use the following command. This assures persistence across restarts.")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"save\":true}'")])]),e._v(" "),t("p",[e._v("At any time, you can reload the stored configuration with the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"load\":true}'")])]),e._v(" "),t("p",[e._v("If you want to erase the stored configuration, use the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"erase\":true}'")])]),e._v(" "),t("p",[e._v("Note that this will not change the running configuration, it only ensures that the default configuration is used at next startup.")]),e._v(" "),t("p",[e._v("If you want to load the default configuration use the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"init\":true}'")])]),e._v(" "),t("p",[e._v("Note that this will not change the stored configuration, "),t("code",[e._v("erase")]),e._v(" or "),t("code",[e._v("save")]),e._v(" is still needed to overwrite the saved configuration.")]),e._v(" "),t("h3",{attrs:{id:"connecting-a-generic-ssd1306-display-to-esp32"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#connecting-a-generic-ssd1306-display-to-esp32"}},[e._v("#")]),e._v(" Connecting a generic SSD1306 display to ESP32")]),e._v(" "),t("p",[e._v("It is possible to connect a generic SSD1306 display with resolution 128*64 to the hardware setups.\nThis example describes how to do it with the ESP32 board.")]),e._v(" "),t("ul",[t("li",[e._v("Connect the display to the ESP32 (display → ESP32):\n"),t("ul",[t("li",[e._v("VCC → 5V (or 3.3V, check your display documentation)")]),e._v(" "),t("li",[e._v("GND → GND")]),e._v(" "),t("li",[e._v("SCL → pin 22")]),e._v(" "),t("li",[e._v("SDA → pin 21")])])]),e._v(" "),t("li",[e._v("Modify the environment definition in "),t("code",[e._v("environments.ini")]),e._v(".\n"),t("ul",[t("li",[e._v("Add the display library:"),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("lib_deps =\n ${com-esp32.lib_deps}\n ...\n ${libraries.ssd1306}\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])])]),e._v(" "),t("li",[e._v("Add relevant build flags:"),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("build_flags =\n ${com-esp32.build_flags}\n ...\n; *** Generic SSD1306 OLED Options **\n '-DZdisplaySSD1306=\"GenericSSD1306\"'\n '-DOLED_SDA=21' ; SSD1306 pin SDA\n '-DOLED_SCL=22' ; SSD1306 pin SCL\n '-DGenericSSD1306=true'\n '-DJSON_TO_OLED=true'\n '-DDISPLAY_PAGE_INTERVAL=30'\n; '-DLOG_TO_OLED=true' ; Enable log to OLED\n; '-DLOG_LEVEL_OLED=LOG_LEVEL_NOTICE'\n; '-DDISPLAY_IDLE_LOGO=false'\n; '-DDISPLAY_BRIGHTNESS=80'\n; '-DDISPLAY_METRIC=false'\n; '-DDISPLAY_FLIP=false'\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br"),t("span",{staticClass:"line-number"},[e._v("12")]),t("br"),t("span",{staticClass:"line-number"},[e._v("13")]),t("br"),t("span",{staticClass:"line-number"},[e._v("14")]),t("br"),t("span",{staticClass:"line-number"},[e._v("15")]),t("br"),t("span",{staticClass:"line-number"},[e._v("16")]),t("br")])])])])])])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{460:function(e,t,a){"use strict";a.r(t);var s=a(14),i=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"displays"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#displays"}},[e._v("#")]),e._v(" Displays")]),e._v(" "),t("h2",{attrs:{id:"ssd1306-display-heltec-sx127x-lilygo®-lora32-boards-generic-ssd1306-displays"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ssd1306-display-heltec-sx127x-lilygo®-lora32-boards-generic-ssd1306-displays"}},[e._v("#")]),e._v(" SSD1306 Display (Heltec SX127X, LILYGO® LoRa32 boards, generic SSD1306 displays)")]),e._v(" "),t("p",[e._v("Several options are available for the display of information on the SSD1306 display. Some options are exclusive to each other, and when a different option is enabled, the current option is disabled.")]),e._v(" "),t("p",[e._v("The current SSD1306 display states are being published to the "),t("code",[e._v("SSD1306toMQTT")]),e._v(" topic, e.g.")]),e._v(" "),t("p",[t("code",[e._v('{"onstate":true,"brightness":50,"display-flip":true,"idlelogo":true,"log-oled":false,"json-oled":true}')])]),e._v(" "),t("h3",{attrs:{id:"display-on-off"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#display-on-off"}},[e._v("#")]),e._v(" Display ON/OFF")]),e._v(" "),t("p",[e._v("To turn the SSD1306 display on or off.")]),e._v(" "),t("p",[e._v("This can be enabled with the compiler directive "),t("code",[e._v("-DDISPLAY_STATE=true")]),e._v(".")]),e._v(" "),t("p",[e._v("MQTT Display OFF command:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m {"onstate":false}')])]),e._v(" "),t("p",[e._v("MQTT Display ON command:")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m {"onstate":true}')])]),e._v(" "),t("h4",{attrs:{id:"usage-of-a-touch-gpio-display-blanking"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#usage-of-a-touch-gpio-display-blanking"}},[e._v("#")]),e._v(" Usage of a touch GPIO display blanking")]),e._v(" "),t("p",[e._v("Support can be enabled to use a GPIO pin as a simple touch sensor to enable the display. When enabled, the display will blank after 30 seconds, and when GPIO 2 is touched, the display will enable for 30 seconds. For testing a wire was connected to the GPIO pin.")]),e._v(" "),t("p",[e._v("This can be enabled with the compiler directive "),t("code",[e._v("-DDISPLAY_BLANKING=true")])]),e._v(" "),t("p",[e._v("Blanking Compiler Directives")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Directive")]),e._v(" "),t("th",[e._v("Default")]),e._v(" "),t("th",[e._v("Description")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("DISPLAY_BLANKING")]),e._v(" "),t("td",[e._v("false")]),e._v(" "),t("td",[e._v("Enables touch based display blanking")])]),e._v(" "),t("tr",[t("td",[e._v("DISPLAY_BLANKING_TOUCH_GPIO")]),e._v(" "),t("td",[e._v("2")]),e._v(" "),t("td",[e._v("GPIO pin to use the touch. Must be a touch supported GPIO pin")])]),e._v(" "),t("tr",[t("td",[e._v("DISPLAY_BLANKING_START")]),e._v(" "),t("td",[e._v("30")]),e._v(" "),t("td",[e._v("Seconds to wait before disabling the display")])])])]),e._v(" "),t("h3",{attrs:{id:"brightness"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#brightness"}},[e._v("#")]),e._v(" Brightness")]),e._v(" "),t("p",[e._v("The display brightness can be set between 0-100%.")]),e._v(" "),t("p",[e._v("It is recommended to set a value lower than 100 to extend the life of the OLED display. The default setting is 50.")]),e._v(" "),t("p",[e._v("This can be set with the compiler directive "),t("code",[e._v("-DDISPLAY_BRIGHTNESS=50")]),e._v(".")]),e._v(" "),t("p",[e._v("or with the runtime command")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m {"brightness":50}')])]),e._v(" "),t("h3",{attrs:{id:"metric-or-imperial-property-units"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#metric-or-imperial-property-units"}},[e._v("#")]),e._v(" Metric or Imperial property units")]),e._v(" "),t("p",[e._v("To have applicable device properties displayed in Imperial units, e.g. °F for temperature.")]),e._v(" "),t("p",[e._v("This can be set with the compiler directive "),t("code",[e._v("-DDISPLAY_METRIC=false")]),e._v(".")]),e._v(" "),t("p",[e._v("As the display Metric setting is being defined in the WebUI part of OpenMQTTGateway changes need to be sent there with the runtime command")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoWebUI/config -m {"displayMetric":false}')])]),e._v(" "),t("h3",{attrs:{id:"rotating-the-display-by-180-degrees"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rotating-the-display-by-180-degrees"}},[e._v("#")]),e._v(" Rotating the display by 180 degrees")]),e._v(" "),t("p",[e._v("This can be set with the compiler directive "),t("code",[e._v("-DDISPLAY_FLIP=false")]),e._v(".")]),e._v(" "),t("p",[e._v("or with the runtime command")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m {"display-flip":false}')])]),e._v(" "),t("h3",{attrs:{id:"display-idle-logo"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#display-idle-logo"}},[e._v("#")]),e._v(" Display idle Logo")]),e._v(" "),t("p",[e._v("To display the OpenMQTTGateway logo during device display idle time. This reduces the likelihood of burn-in.")]),e._v(" "),t("p",[e._v("This can be set with the compiler directive "),t("code",[e._v("-DDISPLAY_IDLE_LOGO=true")]),e._v(".")]),e._v(" "),t("p",[e._v("or at runtime with")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m {"idlelogo":true}')])]),e._v(" "),t("h3",{attrs:{id:"setting-the-log-output"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-log-output"}},[e._v("#")]),e._v(" Setting the log output")]),e._v(" "),t("p",[e._v("The display of serial log messages to the display can be enabled via compiler directive "),t("code",[e._v("-DLOG_TO_OLED=true")]),e._v(" or via MQTT commands.")]),e._v(" "),t("p",[e._v("For example if you want to set the serial log to OLED")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"log-oled\":true}'")])]),e._v(" "),t("p",[e._v("you can also revert it back with")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"log-oled\":false}'")])]),e._v(" "),t("p",[e._v("The log level of the messages displayed is Errors and Warnings, and this can only be changed via the compiler directive "),t("code",[e._v("-DLOG_LEVEL_OLED=LOG_LEVEL_NOTICE")]),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"displaying-module-json-messages-default"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#displaying-module-json-messages-default"}},[e._v("#")]),e._v(" Displaying Module json messages (default)")]),e._v(" "),t("p",[e._v("The display of messages from various modules is also supported. Currently supported modules include "),t("code",[e._v("ZgatewayRTL_433")]),e._v(", "),t("code",[e._v("ZgatewayBT")]),e._v(" and "),t("code",[e._v("ZsensorBME280")]),e._v(".")]),e._v(" "),t("p",[e._v("This can be enabled with the compiler directive "),t("code",[e._v("-DJSON_TO_OLED=true")]),e._v(".")]),e._v(" "),t("p",[e._v("You can also change it by MQTT. For example if you want to display module json messages:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"json-oled\":true}'")])]),e._v(" "),t("p",[e._v("And to disable the display of module json messages:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"display-json\":false}'")])]),e._v(" "),t("h3",{attrs:{id:"store-the-current-display-configuration-in-the-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#store-the-current-display-configuration-in-the-gateway"}},[e._v("#")]),e._v(" Store the current display configuration in the gateway")]),e._v(" "),t("p",[e._v("To store the running display configuration into non-volatile storage on the gateway use the following command. This assures persistence across restarts.")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"save\":true}'")])]),e._v(" "),t("p",[e._v("At any time, you can reload the stored configuration with the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"load\":true}'")])]),e._v(" "),t("p",[e._v("If you want to erase the stored configuration, use the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"erase\":true}'")])]),e._v(" "),t("p",[e._v("Note that this will not change the running configuration, it only ensures that the default configuration is used at next startup.")]),e._v(" "),t("p",[e._v("If you want to load the default configuration use the command:")]),e._v(" "),t("p",[t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoSSD1306/config -m '{\"init\":true}'")])]),e._v(" "),t("p",[e._v("Note that this will not change the stored configuration, "),t("code",[e._v("erase")]),e._v(" or "),t("code",[e._v("save")]),e._v(" is still needed to overwrite the saved configuration.")]),e._v(" "),t("h3",{attrs:{id:"connecting-a-generic-ssd1306-display-to-esp32"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#connecting-a-generic-ssd1306-display-to-esp32"}},[e._v("#")]),e._v(" Connecting a generic SSD1306 display to ESP32")]),e._v(" "),t("p",[e._v("It is possible to connect a generic SSD1306 display with resolution 128*64 to the hardware setups.\nThis example describes how to do it with the ESP32 board.")]),e._v(" "),t("ul",[t("li",[e._v("Connect the display to the ESP32 (display → ESP32):\n"),t("ul",[t("li",[e._v("VCC → 5V (or 3.3V, check your display documentation)")]),e._v(" "),t("li",[e._v("GND → GND")]),e._v(" "),t("li",[e._v("SCL → pin 22")]),e._v(" "),t("li",[e._v("SDA → pin 21")])])]),e._v(" "),t("li",[e._v("Modify the environment definition in "),t("code",[e._v("environments.ini")]),e._v(".\n"),t("ul",[t("li",[e._v("Add the display library:"),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("lib_deps =\n ${com-esp32.lib_deps}\n ...\n ${libraries.ssd1306}\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])])]),e._v(" "),t("li",[e._v("Add relevant build flags:"),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("build_flags =\n ${com-esp32.build_flags}\n ...\n; *** Generic SSD1306 OLED Options **\n '-DZdisplaySSD1306=\"GenericSSD1306\"'\n '-DOLED_SDA=21' ; SSD1306 pin SDA\n '-DOLED_SCL=22' ; SSD1306 pin SCL\n '-DGenericSSD1306=true'\n '-DJSON_TO_OLED=true'\n '-DDISPLAY_PAGE_INTERVAL=30'\n; '-DLOG_TO_OLED=true' ; Enable log to OLED\n; '-DLOG_LEVEL_OLED=LOG_LEVEL_NOTICE'\n; '-DDISPLAY_IDLE_LOGO=false'\n; '-DDISPLAY_BRIGHTNESS=80'\n; '-DDISPLAY_METRIC=false'\n; '-DDISPLAY_FLIP=false'\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br"),t("span",{staticClass:"line-number"},[e._v("11")]),t("br"),t("span",{staticClass:"line-number"},[e._v("12")]),t("br"),t("span",{staticClass:"line-number"},[e._v("13")]),t("br"),t("span",{staticClass:"line-number"},[e._v("14")]),t("br"),t("span",{staticClass:"line-number"},[e._v("15")]),t("br"),t("span",{staticClass:"line-number"},[e._v("16")]),t("br")])])])])])])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/64.c693ad33.js b/dev/assets/js/64.4b220d3f.js similarity index 98% rename from dev/assets/js/64.c693ad33.js rename to dev/assets/js/64.4b220d3f.js index 02663b79..fab4f022 100644 --- a/dev/assets/js/64.c693ad33.js +++ b/dev/assets/js/64.4b220d3f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{464:function(e,t,a){"use strict";a.r(t);var n=a(14),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"rfm69-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rfm69-gateway"}},[e._v("#")]),e._v(" RFM69 gateway")]),e._v(" "),t("p",[e._v("The RFM69 gateway enables to send and receive signal from/to another RFM69 module. It is based on the work of @bbx10 https://github.com/bbx10/nanohab")]),e._v(" "),t("h3",{attrs:{id:"receiving-data-from-rfm-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-rfm-signal"}},[e._v("#")]),e._v(" Receiving data from RFM signal")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),e._v(" "),t("p",[t("code",[e._v("sudo mosquitto_sub -t +/# -v")])]),e._v(" "),t("p",[e._v("Generate your RF signals with a Moteino on other RFM69 based devices, you will receive :")]),e._v(" "),t("p",[t("code",[e._v("home/OpenMQTTGateway/RFM69toMQTT 60,-98,0")])]),e._v(" "),t("p",[e._v('In this case "60,-98,0" is the signal sent by another RFM69 + a wemos D1 with the sample sketch '),t("a",{attrs:{href:"https://github.com/1technophile/rfm69send/blob/master/rfm69send.ino",target:"_blank",rel:"noopener noreferrer"}},[e._v("rfm69send"),t("OutboundLink")],1),e._v(" loaded in it.")]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-to-convert-it-on-rfm69-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-rfm69-signal"}},[e._v("#")]),e._v(" Send data by MQTT to convert it on RFM69 signal")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight" -m \'{"data":"test"}\'')])]),e._v(" "),t("p",[e._v("This command will send by RFM69 the string "),t("em",[e._v("test")]),e._v(" to the default receiver id 99")]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-with-advanced-rfm69-parameters"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-with-advanced-rfm69-parameters"}},[e._v("#")]),e._v(" Send data by MQTT with advanced RFM69 parameters")]),e._v(" "),t("p",[e._v("RFM69 sending support one advanced parameters the target receiver ID.")]),e._v(" "),t("p",[e._v("Example:\nSimplePublishing\n"),t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoRFM69/RCV_34 -m 33151562")]),e._v("\nwill make the gateway send to the receiver ID 34 (node number) instead of 99")]),e._v(" "),t("p",[e._v("JsonPublishing\n"),t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoRFM69 -m \'{"data":1315156,"receiverid":34}\'')]),e._v("\nThis command will send by RFM69 the string "),t("em",[e._v("test")]),e._v(" to the receiver id 34 instead of 99")]),e._v(" "),t("h3",{attrs:{id:"rfm69-acknowledgment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rfm69-acknowledgment"}},[e._v("#")]),e._v(" RFM69 acknowledgment")]),e._v(" "),t("p",[e._v("Unlike RF or IR RFM69 as a complete acknowledgment mechanism. When a signal is sent the RFM69 can acknowledge the fact that the recipient received the message.\nIn this case the gateway will publish the sent message to the topic defined by subjectGTWRFM69toMQTT macro.")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{466:function(e,t,a){"use strict";a.r(t);var n=a(14),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"rfm69-gateway"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rfm69-gateway"}},[e._v("#")]),e._v(" RFM69 gateway")]),e._v(" "),t("p",[e._v("The RFM69 gateway enables to send and receive signal from/to another RFM69 module. It is based on the work of @bbx10 https://github.com/bbx10/nanohab")]),e._v(" "),t("h3",{attrs:{id:"receiving-data-from-rfm-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#receiving-data-from-rfm-signal"}},[e._v("#")]),e._v(" Receiving data from RFM signal")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),e._v(" "),t("p",[t("code",[e._v("sudo mosquitto_sub -t +/# -v")])]),e._v(" "),t("p",[e._v("Generate your RF signals with a Moteino on other RFM69 based devices, you will receive :")]),e._v(" "),t("p",[t("code",[e._v("home/OpenMQTTGateway/RFM69toMQTT 60,-98,0")])]),e._v(" "),t("p",[e._v('In this case "60,-98,0" is the signal sent by another RFM69 + a wemos D1 with the sample sketch '),t("a",{attrs:{href:"https://github.com/1technophile/rfm69send/blob/master/rfm69send.ino",target:"_blank",rel:"noopener noreferrer"}},[e._v("rfm69send"),t("OutboundLink")],1),e._v(" loaded in it.")]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-to-convert-it-on-rfm69-signal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-rfm69-signal"}},[e._v("#")]),e._v(" Send data by MQTT to convert it on RFM69 signal")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoPilight" -m \'{"data":"test"}\'')])]),e._v(" "),t("p",[e._v("This command will send by RFM69 the string "),t("em",[e._v("test")]),e._v(" to the default receiver id 99")]),e._v(" "),t("h3",{attrs:{id:"send-data-by-mqtt-with-advanced-rfm69-parameters"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-with-advanced-rfm69-parameters"}},[e._v("#")]),e._v(" Send data by MQTT with advanced RFM69 parameters")]),e._v(" "),t("p",[e._v("RFM69 sending support one advanced parameters the target receiver ID.")]),e._v(" "),t("p",[e._v("Example:\nSimplePublishing\n"),t("code",[e._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoRFM69/RCV_34 -m 33151562")]),e._v("\nwill make the gateway send to the receiver ID 34 (node number) instead of 99")]),e._v(" "),t("p",[e._v("JsonPublishing\n"),t("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoRFM69 -m \'{"data":1315156,"receiverid":34}\'')]),e._v("\nThis command will send by RFM69 the string "),t("em",[e._v("test")]),e._v(" to the receiver id 34 instead of 99")]),e._v(" "),t("h3",{attrs:{id:"rfm69-acknowledgment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rfm69-acknowledgment"}},[e._v("#")]),e._v(" RFM69 acknowledgment")]),e._v(" "),t("p",[e._v("Unlike RF or IR RFM69 as a complete acknowledgment mechanism. When a signal is sent the RFM69 can acknowledge the fact that the recipient received the message.\nIn this case the gateway will publish the sent message to the topic defined by subjectGTWRFM69toMQTT macro.")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/65.6799670a.js b/dev/assets/js/65.7e32edcd.js similarity index 98% rename from dev/assets/js/65.6799670a.js rename to dev/assets/js/65.7e32edcd.js index 7196d293..38809def 100644 --- a/dev/assets/js/65.6799670a.js +++ b/dev/assets/js/65.7e32edcd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{468:function(e,t,a){"use strict";a.r(t);var n=a(14),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"sensors"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sensors"}},[e._v("#")]),e._v(" Sensors")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),e._v(" "),t("p",[t("code",[e._v("sudo mosquitto_sub -t +/# -v")])]),e._v(" "),t("h3",{attrs:{id:"adc"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adc"}},[e._v("#")]),e._v(" ADC")]),e._v(" "),t("p",[e._v("The value is between 0 and 1024 and is transmitted via MQTT when it changes.\n"),t("code",[e._v('home/OpenMQTTGateway/ADCtoMQTT {"value":543}')])]),e._v(" "),t("h3",{attrs:{id:"dht"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dht"}},[e._v("#")]),e._v(" DHT")]),e._v(" "),t("p",[e._v("You will receive every TimeBetweenReadingDHT (set into config_DHT.h) the DHT measurement (30s per default).")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/DHTtoMQTT {"tempc":21,"tempf":69.8,"hum":51}')])]),e._v(" "),t("p",[e._v("If you want to don't resend value when it is the same you can set dht_always = false in config_DHT.h")]),e._v(" "),t("h3",{attrs:{id:"htu21"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#htu21"}},[e._v("#")]),e._v(" HTU21")]),e._v(" "),t("p",[e._v("You will receive the HTU21 sensor readings every TimeBetweenReadinghtu21 (set into config_HTU21.h) (30s by default).")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/CLIMAtoMQTT/htu {"tempc":25.34064,"tempf":77.61314,"hum":56.53052}')])]),e._v(" "),t("p",[e._v("If you don't want to resend values that haven't changed you can set htu21_always = false in config_HTU21.h")]),e._v(" "),t("h3",{attrs:{id:"ahtx0-aht10-and-aht20"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ahtx0-aht10-and-aht20"}},[e._v("#")]),e._v(" AHTx0 (AHT10 and AHT20)")]),e._v(" "),t("p",[e._v("You will receive the AHT sensor readings every TimeBetweenReadingAHTx0 (set into config_AHTx0.h) (30s by default).")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/CLIMAtoMQTT/aht { "tempc": 27.48108, "tempf": 81.46594, "hum": 48.90614 }')])]),e._v(" "),t("p",[e._v("If you don't want to resend values that haven't changed you can set AHTx0_always = false in config_AHTx0.h")]),e._v(" "),t("h3",{attrs:{id:"ds18x20"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ds18x20"}},[e._v("#")]),e._v(" DS18x20")]),e._v(" "),t("p",[e._v("You will receive the DS18x20 sensor readings every DS1820_INTERVAL_SEC (set into config_DS1820.h) (60s by default).\nEach sensor will be published under the following topic using each sensors' address.")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/CLIMAtoMQTT/ds1820/0x0000000000000000 {"tempc":27.8, "tempf":82.04, "type":"DS18B20","res":"12bit\\n","addr":"0x28616411907650bc"}')])]),e._v(" "),t("p",[e._v("The units for temperature readings are sent in Celsius by default can be changed to Fahrenheit by setting DS1820_FAHRENHEIT = true in in config_DS1820.h")]),e._v(" "),t("p",[e._v("If you don't want to resend values that haven't changed you can set DS1820_ALWAYS = false in config_DS1820.h")]),e._v(" "),t("h3",{attrs:{id:"hcsr501"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hcsr501"}},[e._v("#")]),e._v(" HCSR501")]),e._v(" "),t("p",[e._v("A boolean value of the PIR sensors state is sent when a state change occurs. The length of time that the PIR stays in a triggered state depends on the PIR hardware and is not changed by OpenMQTTGateway.")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/HCSR501toMQTT {"presence":"false"}')])]),e._v(" "),t("p",[e._v("You can have another PIN mirror the value of the PIR sensor output by adding the following to config_HCSR501.h\nThis can be useful if you would like to connect an LED to turn on when motion is detected.")]),e._v(" "),t("p",[t("code",[e._v("#define HCSR501_LED_NOTIFY_GPIO 4")])]),e._v(" "),t("p",[e._v("This notification pin can be inverted if driving directly or through a transistor/mosfet.\n"),t("code",[e._v("#define INVERT_LED_NOTIFY true")])]),e._v(" "),t("h3",{attrs:{id:"rn8209"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rn8209"}},[e._v("#")]),e._v(" RN8209")]),e._v(" "),t("p",[e._v("You will receive every "),t("code",[e._v("TimeBetweenPublishingRN8209")]),e._v(" (set into config_RN8209.h) the RN8209 measurements (every 60s per default), or if the difference between the previous current reading and the new reading is more than 0.1A, or if the difference between the previous voltage reading and the new reading is more than 2V.\nOne reading is done every 0.5s.")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/RN8209toMQTT {"volt":120.34,"current":7.92,"power":954.61}')])]),e._v(" "),t("h3",{attrs:{id:"touch"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#touch"}},[e._v("#")]),e._v(" Touch")]),e._v(" "),t("p",[e._v("This sensor is only for ESP32, using the touch sensing peripheral. Up to 10 touch buttons can be defined, linked to 10 ESP32 pins that support touch sensing (GPIOs 0, 2, 4, 12, 13, 14, 15, 27, 32, 33) by defining TOUCH_GPIO, or TOUCH_GPIO_0 through TOUCH_GPIO_9. For example:")]),e._v(" "),t("p",[t("code",[e._v("#define TOUCH_GPIO 4")])]),e._v(" "),t("p",[e._v("The default is one sensor on GPIO 4.")]),e._v(" "),t("p",[e._v('When a touch is detected, a message is sent indicating the number of the button ("id"), the fact that a touch button was pressed ("on" is 1) and the value measured by the esp32 ("value").')]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/touchToMQTT {"id":0,"on":1,"value":10}')])]),e._v(" "),t("p",[e._v('When the button stops being touched (e.g., the finger is lifted off the button), a message is sent indicating that the button was released ("on" is 0), as well as the duration of the button press in milliseconds ("onDuration").')]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/touchToMQTT {"id":0,"on":0,"value":70,"onDuration":320}')])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{469:function(e,t,a){"use strict";a.r(t);var n=a(14),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"sensors"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sensors"}},[e._v("#")]),e._v(" Sensors")]),e._v(" "),t("p",[e._v("Subscribe to all the messages with mosquitto or open your MQTT client software:")]),e._v(" "),t("p",[t("code",[e._v("sudo mosquitto_sub -t +/# -v")])]),e._v(" "),t("h3",{attrs:{id:"adc"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adc"}},[e._v("#")]),e._v(" ADC")]),e._v(" "),t("p",[e._v("The value is between 0 and 1024 and is transmitted via MQTT when it changes.\n"),t("code",[e._v('home/OpenMQTTGateway/ADCtoMQTT {"value":543}')])]),e._v(" "),t("h3",{attrs:{id:"dht"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dht"}},[e._v("#")]),e._v(" DHT")]),e._v(" "),t("p",[e._v("You will receive every TimeBetweenReadingDHT (set into config_DHT.h) the DHT measurement (30s per default).")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/DHTtoMQTT {"tempc":21,"tempf":69.8,"hum":51}')])]),e._v(" "),t("p",[e._v("If you want to don't resend value when it is the same you can set dht_always = false in config_DHT.h")]),e._v(" "),t("h3",{attrs:{id:"htu21"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#htu21"}},[e._v("#")]),e._v(" HTU21")]),e._v(" "),t("p",[e._v("You will receive the HTU21 sensor readings every TimeBetweenReadinghtu21 (set into config_HTU21.h) (30s by default).")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/CLIMAtoMQTT/htu {"tempc":25.34064,"tempf":77.61314,"hum":56.53052}')])]),e._v(" "),t("p",[e._v("If you don't want to resend values that haven't changed you can set htu21_always = false in config_HTU21.h")]),e._v(" "),t("h3",{attrs:{id:"ahtx0-aht10-and-aht20"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ahtx0-aht10-and-aht20"}},[e._v("#")]),e._v(" AHTx0 (AHT10 and AHT20)")]),e._v(" "),t("p",[e._v("You will receive the AHT sensor readings every TimeBetweenReadingAHTx0 (set into config_AHTx0.h) (30s by default).")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/CLIMAtoMQTT/aht { "tempc": 27.48108, "tempf": 81.46594, "hum": 48.90614 }')])]),e._v(" "),t("p",[e._v("If you don't want to resend values that haven't changed you can set AHTx0_always = false in config_AHTx0.h")]),e._v(" "),t("h3",{attrs:{id:"ds18x20"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ds18x20"}},[e._v("#")]),e._v(" DS18x20")]),e._v(" "),t("p",[e._v("You will receive the DS18x20 sensor readings every DS1820_INTERVAL_SEC (set into config_DS1820.h) (60s by default).\nEach sensor will be published under the following topic using each sensors' address.")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/CLIMAtoMQTT/ds1820/0x0000000000000000 {"tempc":27.8, "tempf":82.04, "type":"DS18B20","res":"12bit\\n","addr":"0x28616411907650bc"}')])]),e._v(" "),t("p",[e._v("The units for temperature readings are sent in Celsius by default can be changed to Fahrenheit by setting DS1820_FAHRENHEIT = true in in config_DS1820.h")]),e._v(" "),t("p",[e._v("If you don't want to resend values that haven't changed you can set DS1820_ALWAYS = false in config_DS1820.h")]),e._v(" "),t("h3",{attrs:{id:"hcsr501"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hcsr501"}},[e._v("#")]),e._v(" HCSR501")]),e._v(" "),t("p",[e._v("A boolean value of the PIR sensors state is sent when a state change occurs. The length of time that the PIR stays in a triggered state depends on the PIR hardware and is not changed by OpenMQTTGateway.")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/HCSR501toMQTT {"presence":"false"}')])]),e._v(" "),t("p",[e._v("You can have another PIN mirror the value of the PIR sensor output by adding the following to config_HCSR501.h\nThis can be useful if you would like to connect an LED to turn on when motion is detected.")]),e._v(" "),t("p",[t("code",[e._v("#define HCSR501_LED_NOTIFY_GPIO 4")])]),e._v(" "),t("p",[e._v("This notification pin can be inverted if driving directly or through a transistor/mosfet.\n"),t("code",[e._v("#define INVERT_LED_NOTIFY true")])]),e._v(" "),t("h3",{attrs:{id:"rn8209"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rn8209"}},[e._v("#")]),e._v(" RN8209")]),e._v(" "),t("p",[e._v("You will receive every "),t("code",[e._v("TimeBetweenPublishingRN8209")]),e._v(" (set into config_RN8209.h) the RN8209 measurements (every 60s per default), or if the difference between the previous current reading and the new reading is more than 0.1A, or if the difference between the previous voltage reading and the new reading is more than 2V.\nOne reading is done every 0.5s.")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/RN8209toMQTT {"volt":120.34,"current":7.92,"power":954.61}')])]),e._v(" "),t("h3",{attrs:{id:"touch"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#touch"}},[e._v("#")]),e._v(" Touch")]),e._v(" "),t("p",[e._v("This sensor is only for ESP32, using the touch sensing peripheral. Up to 10 touch buttons can be defined, linked to 10 ESP32 pins that support touch sensing (GPIOs 0, 2, 4, 12, 13, 14, 15, 27, 32, 33) by defining TOUCH_GPIO, or TOUCH_GPIO_0 through TOUCH_GPIO_9. For example:")]),e._v(" "),t("p",[t("code",[e._v("#define TOUCH_GPIO 4")])]),e._v(" "),t("p",[e._v("The default is one sensor on GPIO 4.")]),e._v(" "),t("p",[e._v('When a touch is detected, a message is sent indicating the number of the button ("id"), the fact that a touch button was pressed ("on" is 1) and the value measured by the esp32 ("value").')]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/touchToMQTT {"id":0,"on":1,"value":10}')])]),e._v(" "),t("p",[e._v('When the button stops being touched (e.g., the finger is lifted off the button), a message is sent indicating that the button was released ("on" is 0), as well as the duration of the button press in milliseconds ("onDuration").')]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/touchToMQTT {"id":0,"on":0,"value":70,"onDuration":320}')])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/67.0d566ba2.js b/dev/assets/js/67.9685d727.js similarity index 98% rename from dev/assets/js/67.0d566ba2.js rename to dev/assets/js/67.9685d727.js index 8d16d4fa..ba5f3af2 100644 --- a/dev/assets/js/67.0d566ba2.js +++ b/dev/assets/js/67.9685d727.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{469:function(t,e,a){"use strict";a.r(e);var i=a(14),o=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"webui"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#webui"}},[t._v("#")]),t._v(" WebUI")]),t._v(" "),e("p",[t._v("For ESP32 based environments a WebUI is available to provide basic configuration and monitoring of your OpenMQTTGateway Device. Functions included are:")]),t._v(" "),e("ul",[e("li",[t._v("Configuration")]),t._v(" "),e("li",[t._v("Information")]),t._v(" "),e("li",[t._v("Firmware Upgrade")]),t._v(" "),e("li",[t._v("Console")]),t._v(" "),e("li",[t._v("Restart")])]),t._v(" "),e("h1",{attrs:{id:"login-authentication"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#login-authentication"}},[t._v("#")]),t._v(" Login Authentication")]),t._v(" "),e("p",[t._v("By default access to the WebUI uses basic authentication to control access to your OpenMQTTGateway Device. The login is "),e("code",[t._v("admin")]),t._v(" and the password is your "),e("code",[t._v("gateway password")]),t._v(" (if unchanged during onboarding there is no password).")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("The communication with the WebUI is not encrypted, which means that your data may be visible on your local network.")])]),t._v(" "),e("h1",{attrs:{id:"configuration-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuration-options"}},[t._v("#")]),t._v(" Configuration Options")]),t._v(" "),e("h2",{attrs:{id:"wifi"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#wifi"}},[t._v("#")]),t._v(" WiFi")]),t._v(" "),e("p",[t._v("Ability to change the SSID and password for your WiFi, if the change is unsuccessful it will revert back to the previous WiFi settings.")]),t._v(" "),e("h2",{attrs:{id:"mqtt"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#mqtt"}},[t._v("#")]),t._v(" MQTT")]),t._v(" "),e("p",[t._v("Ability to change the mqtt settings, if the change is unsuccessful it will revert back to the previous mqtt settings.")]),t._v(" "),e("h2",{attrs:{id:"webui-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#webui-2"}},[t._v("#")]),t._v(" WebUI")]),t._v(" "),e("p",[t._v("Ability to change the display of sensor to Metric or Imperial, and disable the WebUI Authentication")]),t._v(" "),e("h2",{attrs:{id:"bluetooth-low-energy-ble"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bluetooth-low-energy-ble"}},[t._v("#")]),t._v(" Bluetooth Low Energy - BLE")]),t._v(" "),e("p",[t._v("Ability to add the default AES BLE decryption key, and multiple per-device "),e("code",[t._v("macaddress:aeskey")]),t._v(" allowing for devices that cannot have their AES key changed.")]),t._v(" "),e("h2",{attrs:{id:"logging"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[t._v("#")]),t._v(" Logging")]),t._v(" "),e("p",[t._v("Ability to temporarily change the logging level.")]),t._v(" "),e("h1",{attrs:{id:"information"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#information"}},[t._v("#")]),t._v(" Information")]),t._v(" "),e("p",[t._v("Details of OpenMQTTGateway Device status")]),t._v(" "),e("h1",{attrs:{id:"firmware-upgrade"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#firmware-upgrade"}},[t._v("#")]),t._v(" Firmware Upgrade")]),t._v(" "),e("p",[t._v("Ability to upgrade firmware by URL or to latest version.")]),t._v(" "),e("h1",{attrs:{id:"console"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#console"}},[t._v("#")]),t._v(" Console")]),t._v(" "),e("p",[t._v("Ability to view messages from the OpenMQTTGateway console. The scope of messages visible in the UI is limited to just the OpenMQTTGateway codebase, messages from the ESP hardware or other libraries are not visible,")]),t._v(" "),e("p",[t._v("Ability to inject commands to OpenMQTTGateway for processing. The commands accepted are of the form mqtt topic then json message. And as you are already on the target device, you do not need to include the device name ie")]),t._v(" "),e("p",[e("code",[t._v('commands/MQTTtoSYS/config {"cmd":"restart"}')])]),t._v(" "),e("p",[t._v("This works for all modules in your environment.")])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{468:function(t,e,a){"use strict";a.r(e);var i=a(14),o=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"webui"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#webui"}},[t._v("#")]),t._v(" WebUI")]),t._v(" "),e("p",[t._v("For ESP32 based environments a WebUI is available to provide basic configuration and monitoring of your OpenMQTTGateway Device. Functions included are:")]),t._v(" "),e("ul",[e("li",[t._v("Configuration")]),t._v(" "),e("li",[t._v("Information")]),t._v(" "),e("li",[t._v("Firmware Upgrade")]),t._v(" "),e("li",[t._v("Console")]),t._v(" "),e("li",[t._v("Restart")])]),t._v(" "),e("h1",{attrs:{id:"login-authentication"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#login-authentication"}},[t._v("#")]),t._v(" Login Authentication")]),t._v(" "),e("p",[t._v("By default access to the WebUI uses basic authentication to control access to your OpenMQTTGateway Device. The login is "),e("code",[t._v("admin")]),t._v(" and the password is your "),e("code",[t._v("gateway password")]),t._v(" (if unchanged during onboarding there is no password).")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("The communication with the WebUI is not encrypted, which means that your data may be visible on your local network.")])]),t._v(" "),e("h1",{attrs:{id:"configuration-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuration-options"}},[t._v("#")]),t._v(" Configuration Options")]),t._v(" "),e("h2",{attrs:{id:"wifi"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#wifi"}},[t._v("#")]),t._v(" WiFi")]),t._v(" "),e("p",[t._v("Ability to change the SSID and password for your WiFi, if the change is unsuccessful it will revert back to the previous WiFi settings.")]),t._v(" "),e("h2",{attrs:{id:"mqtt"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#mqtt"}},[t._v("#")]),t._v(" MQTT")]),t._v(" "),e("p",[t._v("Ability to change the mqtt settings, if the change is unsuccessful it will revert back to the previous mqtt settings.")]),t._v(" "),e("h2",{attrs:{id:"webui-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#webui-2"}},[t._v("#")]),t._v(" WebUI")]),t._v(" "),e("p",[t._v("Ability to change the display of sensor to Metric or Imperial, and disable the WebUI Authentication")]),t._v(" "),e("h2",{attrs:{id:"bluetooth-low-energy-ble"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bluetooth-low-energy-ble"}},[t._v("#")]),t._v(" Bluetooth Low Energy - BLE")]),t._v(" "),e("p",[t._v("Ability to add the default AES BLE decryption key, and multiple per-device "),e("code",[t._v("macaddress:aeskey")]),t._v(" allowing for devices that cannot have their AES key changed.")]),t._v(" "),e("h2",{attrs:{id:"logging"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[t._v("#")]),t._v(" Logging")]),t._v(" "),e("p",[t._v("Ability to temporarily change the logging level.")]),t._v(" "),e("h1",{attrs:{id:"information"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#information"}},[t._v("#")]),t._v(" Information")]),t._v(" "),e("p",[t._v("Details of OpenMQTTGateway Device status")]),t._v(" "),e("h1",{attrs:{id:"firmware-upgrade"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#firmware-upgrade"}},[t._v("#")]),t._v(" Firmware Upgrade")]),t._v(" "),e("p",[t._v("Ability to upgrade firmware by URL or to latest version.")]),t._v(" "),e("h1",{attrs:{id:"console"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#console"}},[t._v("#")]),t._v(" Console")]),t._v(" "),e("p",[t._v("Ability to view messages from the OpenMQTTGateway console. The scope of messages visible in the UI is limited to just the OpenMQTTGateway codebase, messages from the ESP hardware or other libraries are not visible,")]),t._v(" "),e("p",[t._v("Ability to inject commands to OpenMQTTGateway for processing. The commands accepted are of the form mqtt topic then json message. And as you are already on the target device, you do not need to include the device name ie")]),t._v(" "),e("p",[e("code",[t._v('commands/MQTTtoSYS/config {"cmd":"restart"}')])]),t._v(" "),e("p",[t._v("This works for all modules in your environment.")])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/app.d92db3f7.js b/dev/assets/js/app.44812ec9.js similarity index 85% rename from dev/assets/js/app.d92db3f7.js rename to dev/assets/js/app.44812ec9.js index 49ab1c70..0237c5cf 100644 --- a/dev/assets/js/app.d92db3f7.js +++ b/dev/assets/js/app.44812ec9.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],l=e[1],c=e[2],f=0,p=[];f
'};function o(t,e,n){return tn?n:t}function i(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(r[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=o(t,r.minimum,1),n.status=1===t?null:t;var l=n.render(!e),c=l.querySelector(r.barSelector),u=r.speed,f=r.easing;return l.offsetWidth,a((function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,function(t,e,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(t)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(t)+"%,0)"}:{"margin-left":i(t)+"%"}).transition="all "+e+"ms "+n,o}(t,u,f)),1===t?(s(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){s(l,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),e()}),u)}),u)):setTimeout(e,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout((function(){n.status&&(n.trickle(),t())}),r.trickleSpeed)};return r.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*o(Math.random()*e,.1,.95)),e=o(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},t=0,e=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&n.start(),t++,e++,r.always((function(){0==--e?(t=0,n.done()):n.set((t-e)/t)})),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var o,a=e.querySelector(r.barSelector),l=t?"-100":i(n.status||0),u=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=e.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(e),e},n.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(r.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&p(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var a=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),s=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var r,o=t.length,i=e.charAt(0).toUpperCase()+e.slice(1);o--;)if((r=t[o]+i)in n)return r;return e}(n))}function r(t,e,r){e=n(e),t.style[e]=r}return function(t,e){var n,o,i=arguments;if(2==i.length)for(n in e)void 0!==(o=e[n])&&e.hasOwnProperty(n)&&r(t,n,o);else r(t,i[1],i[2])}}();function l(t,e){return("string"==typeof t?t:f(t)).indexOf(" "+e+" ")>=0}function c(t,e){var n=f(t),r=n+e;l(n,e)||(t.className=r.substring(1))}function u(t,e){var n,r=f(t);l(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function f(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function p(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?r.call(e,n,e,t):r)||(t.exports=o)},function(t,e,n){"use strict";var r=n(0),o=n(45).f,i=n(12),a=n(92),s=n(32),l=n(60),c=n(120);t.exports=function(t,e){var n,u,f,p,d,h=t.target,v=t.global,m=t.stat;if(n=v?r:m?r[h]||s(h,{}):(r[h]||{}).prototype)for(u in e){if(p=e[u],f=t.dontCallGetSet?(d=o(n,u))&&d.value:n[u],!c(v?u:h+(m?".":"#")+u,t.forced)&&void 0!==f){if(typeof p==typeof f)continue;l(p,f)}(t.sham||f&&f.sham)&&i(p,"sham",!0),a(n,u,p,t)}}},function(t,e,n){"use strict";var r=n(25),o=Function.prototype.call;t.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},function(t,e,n){"use strict";var r=n(3);t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,e,n){"use strict";t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){"use strict";var r=n(46),o=n(47);t.exports=function(t){return r(o(t))}},function(t,e,n){"use strict";var r=n(0),o=n(1),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t]):r[t]&&r[t][e]}},function(t,e,n){"use strict";var r=n(1),o=n(102),i=TypeError;t.exports=function(t){if(r(t))return t;throw new i(o(t)+" is not a function")}},function(t,e,n){"use strict";var r=n(0),o=n(55),i=n(8),a=n(57),s=n(53),l=n(52),c=r.Symbol,u=o("wks"),f=l?c.for||c:c&&c.withoutSetter||a;t.exports=function(t){return i(u,t)||(u[t]=s&&i(c,t)?c[t]:f("Symbol."+t)),u[t]}},function(t,e,n){"use strict";var r=n(0),o=n(32),i=r["__core-js_shared__"]||o("__core-js_shared__",{});t.exports=i},function(t,e,n){"use strict";var r=n(0),o=Object.defineProperty;t.exports=function(t,e){try{o(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},function(t,e,n){"use strict";var r=n(47),o=Object;t.exports=function(t){return o(r(t))}},function(t,e,n){"use strict";var r=n(7),o=String,i=TypeError;t.exports=function(t){if(r(t))return t;throw new i(o(t)+" is not an object")}},function(t,e,n){"use strict";var r=n(117);t.exports=function(t){return r(t.length)}},function(t,e,n){var r=n(144),o=n(10),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(t){return o(t)&&a.call(t,"callee")&&!s.call(t,"callee")};t.exports=l},function(t,e,n){var r=n(9)(n(6),"Map");t.exports=r},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(164),o=n(171),i=n(173),a=n(174),s=n(175);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(4),o=n(43),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(a.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(11),o=n(10);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e){t.exports=function(t){return t}},function(t,e,n){"use strict";var r=n(5),o=n(24),i=n(98),a=n(26),s=n(27),l=n(49),c=n(8),u=n(58),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=s(t),e=l(e),u)try{return f(t,e)}catch(t){}if(c(t,e))return a(!o(i.f,t,e),t[e])}},function(t,e,n){"use strict";var r=n(2),o=n(3),i=n(16),a=Object,s=r("".split);t.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"===i(t)?s(t,""):a(t)}:a},function(t,e,n){"use strict";var r=n(48),o=TypeError;t.exports=function(t){if(r(t))throw new o("Can't call method on "+t);return t}},function(t,e,n){"use strict";t.exports=function(t){return null==t}},function(t,e,n){"use strict";var r=n(99),o=n(50);t.exports=function(t){var e=r(t,"string");return o(e)?e:e+""}},function(t,e,n){"use strict";var r=n(28),o=n(1),i=n(51),a=n(52),s=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return o(e)&&i(e.prototype,s(t))}},function(t,e,n){"use strict";var r=n(2);t.exports=r({}.isPrototypeOf)},function(t,e,n){"use strict";var r=n(53);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){"use strict";var r=n(54),o=n(3),i=n(0).String;t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol("symbol detection");return!i(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},function(t,e,n){"use strict";var r,o,i=n(0),a=n(100),s=i.process,l=i.Deno,c=s&&s.versions||l&&l.version,u=c&&c.v8;u&&(o=(r=u.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),t.exports=o},function(t,e,n){"use strict";var r=n(56),o=n(31);(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.35.0",mode:r?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.35.0/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e,n){"use strict";t.exports=!1},function(t,e,n){"use strict";var r=n(2),o=0,i=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++o+i,36)}},function(t,e,n){"use strict";var r=n(5),o=n(3),i=n(104);t.exports=!r&&!o((function(){return 7!==Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){"use strict";t.exports={}},function(t,e,n){"use strict";var r=n(8),o=n(111),i=n(45),a=n(15);t.exports=function(t,e,n){for(var s=o(e),l=a.f,c=i.f,u=0;uu))return!1;var p=l.get(t),d=l.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,m=2&n?new r:void 0;for(l.set(t,e),l.set(e,t);++h-1&&t%1==0&&t=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,g,2):String(t)}function g(t,e){return e&&e.__v_isRef?e.value:e}function y(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var x=Object.prototype.hasOwnProperty;function S(t,e){return x.call(t,e)}function k(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var O=/-(\w)/g,P=k((function(t){return t.replace(O,(function(t,e){return e?e.toUpperCase():""}))})),T=k((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),C=/\B([A-Z])/g,E=k((function(t){return t.replace(C,"-$1").toLowerCase()}));var j=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function $(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function A(t,e){for(var n in e)t[n]=e[n];return t}function M(t){for(var e={},n=0;n0,Z=K&&K.indexOf("edge/")>0;K&&K.indexOf("android");var tt=K&&/iphone|ipad|ipod|ios/.test(K);K&&/chrome\/\d+/.test(K),K&&/phantomjs/.test(K);var et,nt=K&&K.match(/firefox\/(\d+)/),rt={}.watch,ot=!1;if(X)try{var it={};Object.defineProperty(it,"passive",{get:function(){ot=!0}}),window.addEventListener("test-passive",null,it)}catch(t){}var at=function(){return void 0===et&&(et=!X&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),et},st=X&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function lt(t){return"function"==typeof t&&/native code/.test(t.toString())}var ct,ut="undefined"!=typeof Symbol&<(Symbol)&&"undefined"!=typeof Reflect&<(Reflect.ownKeys);ct="undefined"!=typeof Set&<(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ft=null;function pt(t){void 0===t&&(t=null),t||ft&&ft._scope.off(),ft=t,t&&t._scope.on()}var dt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),ht=function(t){void 0===t&&(t="");var e=new dt;return e.text=t,e.isComment=!0,e};function vt(t){return new dt(void 0,void 0,void 0,String(t))}function mt(t){var e=new dt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}"function"==typeof SuppressedError&&SuppressedError;var gt=0,yt=[],bt=function(){function t(){this._pending=!1,this.id=gt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,yt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.filter((function(t){return t}));for(var n=0,r=e.length;n0&&(Kt((c=t(c,"".concat(n||"","_").concat(r)))[0])&&Kt(f)&&(p[u]=vt(f.text+c[0].text),c.shift()),p.push.apply(p,c)):l(c)?Kt(f)?p[u]=vt(f.text+c):""!==c&&p.push(vt(c)):Kt(c)&&Kt(f)?p[u]=vt(f.text+c.text):(s(e._isVList)&&a(c.tag)&&i(c.key)&&a(n)&&(c.key="__vlist".concat(n,"_").concat(r,"__")),p.push(c)));return p}(t):void 0}function Kt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Yt(t,e){var n,r,i,s,l=null;if(o(t)||"string"==typeof t)for(l=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,l=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&l===o.$key&&!a&&!o.$hasNormal)return o;for(var c in i={},e)e[c]&&"$"!==c[0]&&(i[c]=me(t,n,c,e[c]))}else i={};for(var u in n)u in i||(i[u]=ge(n,u));return e&&Object.isExtensible(e)&&(e._normalized=i),W(i,"$stable",s),W(i,"$key",l),W(i,"$hasNormal",a),i}function me(t,e,n,r){var i=function(){var e=ft;pt(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Xt(n))&&n[0];return pt(e),n&&(!i||1===n.length&&i.isComment&&!he(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function ge(t,e){return function(){return t[e]}}function ye(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};W(e,"_v_attr_proxy",!0),be(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||be(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||_e(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:j(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Ft(t,e,n)}))}}}function be(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,we(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function we(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function _e(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var xe=null;function Se(t,e){return(t.__esModule||ut&&"Module"===t[Symbol.toStringTag])&&(t=t.default),u(t)?e.extend(t):t}function ke(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(cn=function(){return un.now()})}var fn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function pn(){var t,e;for(ln=cn(),an=!0,en.sort(fn),sn=0;snsn&&en[n].id>t.id;)n--;en.splice(n+1,0,t)}else en.push(t);on||(on=!0,De(pn))}}function hn(t,e){if(t){for(var n=Object.create(null),r=ut?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!S(o,"default"))a=!1;else if(""===a||a===E(t)){var l=Un(String,o.type);(l<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function Yn(t,e){var n=t.cache,r=t.keys,o=t._vnode,i=t.$vnode;for(var a in n){var s=n[a];if(s){var l=s.name;l&&!e(l)&&Jn(n,a,r,o)}}i.componentOptions.children=void 0}function Jn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,_(n,e)}Qn.prototype._init=function(t){var e=this;e._uid=Vn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Nt(!0),e._scope.parent=void 0,e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=jn(Wn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Xe(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=pe(e._renderChildren,o),t.$scopedSlots=n?ve(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return Oe(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Oe(t,e,n,r,o,!0)};var i=n&&n.data;At(t,"$attrs",i&&i.attrs||r,null,!0),At(t,"$listeners",e._parentListeners||r,null,!0)}(e),tn(e,"beforeCreate",void 0,!1),function(t){var e=hn(t.$options.inject,t);e&&(Ct(!1),Object.keys(e).forEach((function(n){At(t,n,e[n])})),Ct(!0))}(e),Dn(e),function(t){var e=t.$options.provide;if(e){var n=c(e)?e.call(t):e;if(!u(n))return;for(var r=Ht(t),o=ut?Reflect.ownKeys(n):Object.keys(n),i=0;i1?$(n):n;for(var r=$(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Jn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Jn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Yn(t,(function(t){return Kn(e,t)}))})),this.$watch("exclude",(function(e){Yn(t,(function(t){return!Kn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=ke(t),n=e&&e.componentOptions;if(n){var r=Xn(n),o=this.include,i=this.exclude;if(o&&(!r||!Kn(o,r))||i&&r&&Kn(i,r))return e;var a=this.cache,s=this.keys,l=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[l]?(e.componentInstance=a[l].componentInstance,_(s,l),s.push(l)):(this.vnodeToCache=e,this.keyToCache=l),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return H}};Object.defineProperty(t,"config",e),t.util={warn:Sn,extend:A,mergeOptions:jn,defineReactive:At},t.set=Mt,t.delete=Lt,t.nextTick=De,t.observable=function(t){return $t(t),t},t.options=Object.create(null),q.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,A(t.options.components,tr),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=$(arguments,1);return n.unshift(this),c(t.install)?t.install.apply(t,n):c(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=jn(this.options,t),this}}(t),Gn(t),function(t){q.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&c(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Qn),Object.defineProperty(Qn.prototype,"$isServer",{get:at}),Object.defineProperty(Qn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Qn,"FunctionalRenderContext",{value:vn}),Qn.version="2.7.16";var er=b("style,class"),nr=b("input,textarea,option,select,progress"),rr=b("contenteditable,draggable,spellcheck"),or=b("events,caret,typing,plaintext-only"),ir=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ar="http://www.w3.org/1999/xlink",sr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},lr=function(t){return sr(t)?t.slice(6,t.length):""},cr=function(t){return null==t||!1===t};function ur(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=fr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=fr(e,n.data));return function(t,e){if(a(t)||a(e))return pr(t,dr(e));return""}(e.staticClass,e.class)}function fr(t,e){return{staticClass:pr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function pr(t,e){return t?e?t+" "+e:t:e||""}function dr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Ir(t,e,n):ir(e)?cr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):rr(e)?t.setAttribute(e,function(t,e){return cr(e)||"false"===e?"false":"contenteditable"===t&&or(e)?e:"true"}(e,n)):sr(e)?cr(n)?t.removeAttributeNS(ar,lr(e)):t.setAttributeNS(ar,e,n):Ir(t,e,n)}function Ir(t,e,n){if(cr(n))t.removeAttribute(e);else{if(Y&&!J&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Br={create:Rr,update:Rr};function Dr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=ur(e),l=n._transitionClasses;a(l)&&(s=pr(s,dr(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Fr,qr={create:Dr,update:Dr};function Nr(t,e,n){var r=Fr;return function o(){var i=e.apply(null,arguments);null!==i&&Vr(t,o,n,r)}}var Hr=$e&&!(nt&&Number(nt[1])<=53);function zr(t,e,n,r){if(Hr){var o=ln,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Fr.addEventListener(t,e,ot?{capture:n,passive:r}:n)}function Vr(t,e,n,r){(r||Fr).removeEventListener(t,e._wrapper||e,n)}function Wr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Fr=e.elm||t.elm,function(t){if(a(t.__r)){var e=Y?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Wt(n,r,zr,Vr,Nr,e.context),Fr=void 0}}var Qr,Gr={create:Wr,update:Wr,destroy:function(t){return Wr(t,kr)}};function Xr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,l=t.data.domProps||{},c=e.data.domProps||{};for(n in(a(c.__ob__)||s(c._v_attr_proxy))&&(c=e.data.domProps=A({},c)),l)n in c||(o[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===l[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var u=i(r)?"":String(r);Kr(o,u)&&(o.value=u)}else if("innerHTML"===n&&mr(o.tagName)&&i(o.innerHTML)){(Qr=Qr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=Qr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==l[n])try{o[n]=r}catch(t){}}}}function Kr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return y(n)!==y(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Yr={create:Xr,update:Xr},Jr=k((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Zr(t){var e=to(t.style);return t.staticStyle?A(t.staticStyle,e):e}function to(t){return Array.isArray(t)?M(t):"string"==typeof t?Jr(t):t}var eo,no=/^--/,ro=/\s*!important$/,oo=function(t,e,n){if(no.test(e))t.style.setProperty(e,n);else if(ro.test(n))t.style.setProperty(E(e),n.replace(ro,""),"important");else{var r=ao(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(co).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function fo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(co).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function po(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&A(e,ho(t.name||"v")),A(e,t),e}return"string"==typeof t?ho(t):void 0}}var ho=k((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),vo=X&&!J,mo="transition",go="transitionend",yo="animation",bo="animationend";vo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(mo="WebkitTransition",go="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(yo="WebkitAnimation",bo="webkitAnimationEnd"));var wo=X?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function _o(t){wo((function(){wo(t)}))}function xo(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),uo(t,e))}function So(t,e){t._transitionClasses&&_(t._transitionClasses,e),fo(t,e)}function ko(t,e,n){var r=Po(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?go:bo,l=0,c=function(){t.removeEventListener(s,u),n()},u=function(e){e.target===t&&++l>=a&&c()};setTimeout((function(){l0&&(n="transition",u=a,f=i.length):"animation"===e?c>0&&(n="animation",u=c,f=l.length):f=(n=(u=Math.max(a,c))>0?a>c?"transition":"animation":null)?"transition"===n?i.length:l.length:0,{type:n,timeout:u,propCount:f,hasTransform:"transition"===n&&Oo.test(r[mo+"Property"])}}function To(t,e){for(;t.length1}function Mo(t,e){!0!==e.data.show&&Eo(e)}var Lo=function(t){var e,n,r={},c=t.modules,u=t.nodeOps;for(e=0;eh?w(t,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&x(e,f,h)}(f,v,g,n,c):a(g)?(a(t.text)&&u.setTextContent(f,""),w(f,null,g,0,g.length-1,n)):a(v)?x(v,0,v.length-1):a(t.text)&&u.setTextContent(f,""):t.text!==e.text&&u.setTextContent(f,e.text),a(h)&&a(d=h.hook)&&a(d=d.postpatch)&&d(t,e)}}}function P(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(I(Do(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Bo(t,e){return e.every((function(e){return!I(e,t)}))}function Do(t){return"_value"in t?t._value:t.value}function Fo(t){t.target.composing=!0}function qo(t){t.target.composing&&(t.target.composing=!1,No(t.target,"input"))}function No(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Ho(t){return!t.componentInstance||t.data&&t.data.transition?t:Ho(t.componentInstance._vnode)}var zo={model:Ro,show:{bind:function(t,e,n){var r=e.value,o=(n=Ho(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,Eo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=Ho(n)).data&&n.data.transition?(n.data.show=!0,r?Eo(n,(function(){t.style.display=t.__vOriginalDisplay})):jo(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},Vo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Wo(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Wo(ke(e.children)):t}function Qo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[P(r)]=o[r];return e}function Go(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Xo=function(t){return t.tag||he(t)},Ko=function(t){return"show"===t.name},Yo={name:"transition",props:Vo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Xo)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Wo(o);if(!i)return o;if(this._leaving)return Go(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:l(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Qo(this),c=this._vnode,u=Wo(c);if(i.data.directives&&i.data.directives.some(Ko)&&(i.data.show=!0),u&&u.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,u)&&!he(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var f=u.data.transition=A({},s);if("out-in"===r)return this._leaving=!0,Qt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Go(t,o);if("in-out"===r){if(he(i))return c;var p,d=function(){p()};Qt(s,"afterEnter",d),Qt(s,"enterCancelled",d),Qt(f,"delayLeave",(function(t){p=t}))}}return o}}},Jo=A({tag:String,moveClass:String},Vo);function Zo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function ti(t){t.data.newPos=t.elm.getBoundingClientRect()}function ei(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Jo.mode;var ni={Transition:Yo,TransitionGroup:{props:Jo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Ye(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Qo(this),s=0;s-1?yr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:yr[t]=/HTMLUnknownElement/.test(e.toString())},A(Qn.options.directives,zo),A(Qn.options.components,ni),Qn.prototype.__patch__=X?Lo:L,Qn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=ht),tn(t,"beforeMount"),r=function(){t._update(t._render(),n)},new Ve(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&tn(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),c=e&&e.path||"/",u=l.path?Si(l.path,c,n||o.append):c,f=function(t,e,n){void 0===e&&(e={});var r,o=n||ui;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(ci):ci(a)}return r}(l.query,o.query,r&&r.options.parseQuery),p=o.hash||l.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:u,query:f,hash:p}}var zi,Vi=function(){},Wi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,l={},c=n.options.linkActiveClass,u=n.options.linkExactActiveClass,f=null==c?"router-link-active":c,p=null==u?"router-link-exact-active":u,d=null==this.activeClass?f:this.activeClass,h=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?di(null,Hi(a.redirectedFrom),null,n):a;l[h]=yi(r,v,this.exactPath),l[d]=this.exact||this.exactPath?l[h]:function(t,e){return 0===t.path.replace(pi,"/").indexOf(e.path.replace(pi,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=l[h]?this.ariaCurrentValue:null,g=function(t){Qi(t)&&(e.replace?n.replace(i,Vi):n.push(i,Vi))},y={click:Qi};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:l},w=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:l[d],isExactActive:l[h]});if(w){if(1===w.length)return w[0];if(w.length>1||!w.length)return 0===w.length?t():t("span",{},w)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var _=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Ni(u.path,s.params),l(u,s,a)}if(s.path){s.params={};for(var d=0;d-1}function ka(t,e){return Sa(t)&&t._isRouter&&(null==e||t.type===e)}function Oa(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Pa(t){return function(e,n,r){var o=!1,i=0,a=null;Ta(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var l,c=ja((function(e){var o;((o=e).__esModule||Ea&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:zi.extend(e),n.components[s]=e,--i<=0&&r()})),u=ja((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Sa(t)?t:new Error(e),r(a))}));try{l=t(c,u)}catch(t){u(t)}if(l)if("function"==typeof l.then)l.then(c,u);else{var f=l.component;f&&"function"==typeof f.then&&f.then(c,u)}}})),o||r()}}function Ta(t,e){return Ca(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Ca(t){return Array.prototype.concat.apply([],t)}var Ea="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function ja(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var $a=function(t,e){this.router=t,this.base=function(t){if(!t)if(Gi){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=vi,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Aa(t,e,n,r){var o=Ta(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=zi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Ca(r?o.reverse():o)}function Ma(t,e){if(e)return function(){return t.apply(e,arguments)}}$a.prototype.listen=function(t){this.cb=t},$a.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},$a.prototype.onError=function(t){this.errorCbs.push(t)},$a.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(ka(t,ya.redirected)&&i===vi||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},$a.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!ka(t)&&Sa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},l=t.matched.length-1,c=o.matched.length-1;if(yi(t,o)&&l===c&&t.matched[l]===o.matched[c])return this.ensureURL(),t.hash&&aa(this.router,o,t,!1),s(((a=_a(i=o,t,ya.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var u=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=va&&n;r&&this.listeners.push(ia());var o=function(){var n=t.current,o=Ra(t.base);t.current===vi&&o===t._startLocation||t.transitionTo(o,(function(t){r&&aa(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ma(ki(r.base+t.fullPath)),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ga(ki(r.base+t.fullPath)),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ra(this.base)!==this.current.fullPath){var e=ki(this.base+this.current.fullPath);t?ma(e):ga(e)}},e.prototype.getCurrentLocation=function(){return Ra(this.base)},e}($a);function Ra(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(ki(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ua=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ra(t);if(!/^\/#/.test(e))return window.location.replace(ki(t+"/#"+e)),!0}(this.base)||Ia()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=va&&e;n&&this.listeners.push(ia());var r=function(){var e=t.current;Ia()&&t.transitionTo(Ba(),(function(r){n&&aa(t.router,r,e,!0),va||qa(r.fullPath)}))},o=va?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Fa(t.fullPath),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){qa(t.fullPath),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ba()!==e&&(t?Fa(e):qa(e))},e.prototype.getCurrentLocation=function(){return Ba()},e}($a);function Ia(){var t=Ba();return"/"===t.charAt(0)||(qa("/"+t),!1)}function Ba(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Da(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Fa(t){va?ma(Da(t)):window.location.hash=t}function qa(t){va?ga(Da(t)):window.location.replace(Da(t))}var Na=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){ka(t,ya.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}($a),Ha=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Yi(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!va&&!1!==t.fallback,this.fallback&&(e="hash"),Gi||(e="abstract"),this.mode=e,e){case"history":this.history=new La(this,t.base);break;case"hash":this.history=new Ua(this,t.base,this.fallback);break;case"abstract":this.history=new Na(this,t.base);break;default:0}},za={currentRoute:{configurable:!0}};Ha.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},za.currentRoute.get=function(){return this.history&&this.history.current},Ha.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof La||n instanceof Ua){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;va&&o&&"fullPath"in t&&aa(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Ha.prototype.beforeEach=function(t){return Wa(this.beforeHooks,t)},Ha.prototype.beforeResolve=function(t){return Wa(this.resolveHooks,t)},Ha.prototype.afterEach=function(t){return Wa(this.afterHooks,t)},Ha.prototype.onReady=function(t,e){this.history.onReady(t,e)},Ha.prototype.onError=function(t){this.history.onError(t)},Ha.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Ha.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Ha.prototype.go=function(t){this.history.go(t)},Ha.prototype.back=function(){this.go(-1)},Ha.prototype.forward=function(){this.go(1)},Ha.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Ha.prototype.resolve=function(t,e,n){var r=Hi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?ki(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Ha.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ha.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==vi&&this.history.transitionTo(this.history.getCurrentLocation())},Ha.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==vi&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ha.prototype,za);var Va=Ha;function Wa(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Ha.install=function t(e){if(!t.installed||zi!==e){t.installed=!0,zi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",_i),e.component("RouterLink",Wi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ha.version="3.6.5",Ha.isNavigationFailure=ka,Ha.NavigationFailureType=ya,Ha.START_LOCATION=vi,Gi&&window.Vue&&window.Vue.use(Ha);n(97);n(90),n(127);var Qa={"components/AlgoliaSearchBox":()=>Promise.all([n.e(0),n.e(19)]).then(n.bind(null,418)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(20)]).then(n.bind(null,256)),"components/DropdownTransition":()=>Promise.all([n.e(0),n.e(31)]).then(n.bind(null,244)),"components/Home":()=>Promise.all([n.e(0),n.e(22)]).then(n.bind(null,285)),"components/NavLink":()=>n.e(41).then(n.bind(null,243)),"components/NavLinks":()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,268)),"components/Navbar":()=>Promise.all([n.e(0),n.e(1)]).then(n.bind(null,415)),"components/Page":()=>Promise.all([n.e(0),n.e(14)]).then(n.bind(null,286)),"components/PageEdit":()=>Promise.all([n.e(0),n.e(23)]).then(n.bind(null,270)),"components/PageNav":()=>Promise.all([n.e(0),n.e(21)]).then(n.bind(null,271)),"components/Sidebar":()=>Promise.all([n.e(0),n.e(11)]).then(n.bind(null,287)),"components/SidebarButton":()=>Promise.all([n.e(0),n.e(32)]).then(n.bind(null,288)),"components/SidebarGroup":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,269)),"components/SidebarLink":()=>Promise.all([n.e(0),n.e(25)]).then(n.bind(null,257)),"components/SidebarLinks":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,255)),"global-components/Badge":()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,424)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,419)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,420)),"layouts/404":()=>n.e(7).then(n.bind(null,421)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,422)),NotFound:()=>n.e(7).then(n.bind(null,421)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,422))},Ga={"v-96f26938":()=>n.e(48).then(n.bind(null,425)),"v-347fe277":()=>n.e(12).then(n.bind(null,426)),"v-06f4d0aa":()=>n.e(16).then(n.bind(null,427)),"v-b936cd92":()=>n.e(10).then(n.bind(null,428)),"v-73cb197f":()=>n.e(17).then(n.bind(null,429)),"v-095f6301":()=>n.e(42).then(n.bind(null,430)),"v-08357a02":()=>n.e(13).then(n.bind(null,431)),"v-2db1db37":()=>n.e(50).then(n.bind(null,432)),"v-e115e73a":()=>n.e(49).then(n.bind(null,433)),"v-f3fbff12":()=>n.e(52).then(n.bind(null,434)),"v-412f01af":()=>n.e(26).then(n.bind(null,435)),"v-117d8812":()=>n.e(51).then(n.bind(null,436)),"v-01bee537":()=>n.e(53).then(n.bind(null,437)),"v-56e06d4d":()=>n.e(54).then(n.bind(null,438)),"v-5e0eec87":()=>n.e(43).then(n.bind(null,439)),"v-204c7852":()=>n.e(24).then(n.bind(null,440)),"v-29f81312":()=>n.e(55).then(n.bind(null,441)),"v-0c47cd52":()=>n.e(56).then(n.bind(null,442)),"v-cf2ed192":()=>n.e(33).then(n.bind(null,443)),"v-b5aec012":()=>n.e(44).then(n.bind(null,444)),"v-eab731fa":()=>n.e(34).then(n.bind(null,445)),"v-0d1e8e9e":()=>n.e(57).then(n.bind(null,446)),"v-2fe62c26":()=>n.e(35).then(n.bind(null,447)),"v-aa1cc612":()=>n.e(58).then(n.bind(null,448)),"v-255607ed":()=>n.e(36).then(n.bind(null,449)),"v-6e14dcd7":()=>n.e(27).then(n.bind(null,450)),"v-7df515d2":()=>n.e(37).then(n.bind(null,451)),"v-303bd052":()=>n.e(59).then(n.bind(null,452)),"v-2c32e617":()=>n.e(38).then(n.bind(null,453)),"v-27c660f7":()=>n.e(28).then(n.bind(null,454)),"v-246d3f77":()=>n.e(60).then(n.bind(null,455)),"v-2b7b8f3b":()=>n.e(61).then(n.bind(null,456)),"v-0d819412":()=>n.e(62).then(n.bind(null,457)),"v-bbb970d2":()=>n.e(18).then(n.bind(null,458)),"v-288d7b9e":()=>n.e(63).then(n.bind(null,459)),"v-20c05837":()=>n.e(45).then(n.bind(null,460)),"v-749f316f":()=>n.e(29).then(n.bind(null,461)),"v-3043a2b9":()=>n.e(39).then(n.bind(null,462)),"v-a9ffe0fe":()=>n.e(46).then(n.bind(null,463)),"v-21b208b7":()=>n.e(64).then(n.bind(null,464)),"v-947f362a":()=>n.e(30).then(n.bind(null,465)),"v-131b9357":()=>n.e(40).then(n.bind(null,466)),"v-93d2a72a":()=>n.e(66).then(n.bind(null,467)),"v-2494b4d7":()=>n.e(65).then(n.bind(null,468)),"v-2566e137":()=>n.e(67).then(n.bind(null,469))};function Xa(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Ka=/-(\w)/g,Ya=Xa(t=>t.replace(Ka,(t,e)=>e?e.toUpperCase():"")),Ja=/\B([A-Z])/g,Za=Xa(t=>t.replace(Ja,"-$1").toLowerCase()),ts=Xa(t=>t.charAt(0).toUpperCase()+t.slice(1));function es(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(ts(Ya(e))):t(ts(e))||t(Za(e))}const ns=Object.assign({},Qa,Ga),rs=t=>ns[t],os=t=>Ga[t],is=t=>Qa[t],as=t=>Qn.component(t);function ss(t){return es(os,t)}function ls(t){return es(is,t)}function cs(t){return es(rs,t)}function us(t){return es(as,t)}function fs(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!us(t)&&cs(t)){const e=await cs(t)();Qn.component(t,e.default)}}))}function ps(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var ds=n(86),hs=n.n(ds),vs=n(87),ms=n.n(vs),gs={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${ms()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=bs(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=ws(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return hs()([{name:"description",content:this.$description}],t,this.siteMeta,_s)},updateCanonicalLink(){ys(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",bs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){ws(null,this.currentMetaTags),ys()}};function ys(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function bs(t=""){return t?``:""}function ws(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function _s(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var xs=n(88),Ss={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(xs)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},ks=n(22),Os=n.n(ks),Ps={mounted(){Os.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Qn.component(t.name)||Os.a.start(),n()}),this.$router.afterEach(()=>{Os.a.done(),this.isSidebarOpen=!1})}},Ts=n(89),Cs=n.n(Ts),Es=[gs,Ss,Ps,{mounted(){Cs.a.polyfill()}}],js={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return ps("layout",t),Qn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},$s=n(14),As=Object($s.a)(js,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(As,"mixins",Es);const Ms=[{name:"v-96f26938",path:"/",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-96f26938").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-347fe277",path:"/integrate/aws_iot.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-347fe277").then(n)}},{name:"v-06f4d0aa",path:"/integrate/home_assistant.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-06f4d0aa").then(n)}},{name:"v-b936cd92",path:"/integrate/jeedom.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-b936cd92").then(n)}},{name:"v-73cb197f",path:"/integrate/node_red.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-73cb197f").then(n)}},{name:"v-095f6301",path:"/integrate/openhab2.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-095f6301").then(n)}},{name:"v-08357a02",path:"/integrate/openhab3.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-08357a02").then(n)}},{name:"v-2db1db37",path:"/participate/community.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2db1db37").then(n)}},{name:"v-e115e73a",path:"/participate/adding-protocols.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-e115e73a").then(n)}},{name:"v-f3fbff12",path:"/participate/support.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-f3fbff12").then(n)}},{name:"v-412f01af",path:"/prerequisites/M5.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-412f01af").then(n)}},{name:"v-117d8812",path:"/participate/development.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-117d8812").then(n)}},{name:"v-01bee537",path:"/prerequisites/board.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-01bee537").then(n)}},{name:"v-56e06d4d",path:"/prerequisites/broker.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-56e06d4d").then(n)}},{name:"v-5e0eec87",path:"/prerequisites/controller.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-5e0eec87").then(n)}},{name:"v-204c7852",path:"/prerequisites/devices.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-204c7852").then(n)}},{name:"v-29f81312",path:"/prerequisites/parts.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-29f81312").then(n)}},{name:"v-0c47cd52",path:"/setitup/actuators.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-0c47cd52").then(n)}},{name:"v-cf2ed192",path:"/setitup/ble.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-cf2ed192").then(n)}},{name:"v-b5aec012",path:"/setitup/gsm.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-b5aec012").then(n)}},{name:"v-eab731fa",path:"/setitup/ir.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-eab731fa").then(n)}},{name:"v-0d1e8e9e",path:"/setitup/lora.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-0d1e8e9e").then(n)}},{name:"v-2fe62c26",path:"/setitup/rf.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2fe62c26").then(n)}},{name:"v-aa1cc612",path:"/setitup/sensors.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-aa1cc612").then(n)}},{name:"v-255607ed",path:"/setitup/serial.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-255607ed").then(n)}},{name:"v-6e14dcd7",path:"/upload/binaries.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-6e14dcd7").then(n)}},{name:"v-7df515d2",path:"/upload/advanced-configuration.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-7df515d2").then(n)}},{name:"v-303bd052",path:"/upload/builds.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-303bd052").then(n)}},{name:"v-2c32e617",path:"/upload/gitpod.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2c32e617").then(n)}},{name:"v-27c660f7",path:"/upload/portal.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-27c660f7").then(n)}},{name:"v-246d3f77",path:"/upload/troubleshoot.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-246d3f77").then(n)}},{name:"v-2b7b8f3b",path:"/upload/web-install.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2b7b8f3b").then(n)}},{name:"v-0d819412",path:"/use/actuators.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-0d819412").then(n)}},{name:"v-bbb970d2",path:"/use/ble.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-bbb970d2").then(n)}},{name:"v-288d7b9e",path:"/use/displays.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-288d7b9e").then(n)}},{name:"v-20c05837",path:"/use/gateway.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-20c05837").then(n)}},{name:"v-749f316f",path:"/use/lora.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-749f316f").then(n)}},{name:"v-3043a2b9",path:"/use/boards.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-3043a2b9").then(n)}},{name:"v-a9ffe0fe",path:"/use/ir.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-a9ffe0fe").then(n)}},{name:"v-21b208b7",path:"/use/rfm69.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-21b208b7").then(n)}},{name:"v-947f362a",path:"/use/rf.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-947f362a").then(n)}},{name:"v-131b9357",path:"/use/gsm.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-131b9357").then(n)}},{name:"v-93d2a72a",path:"/use/serial.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-93d2a72a").then(n)}},{name:"v-2494b4d7",path:"/use/sensors.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2494b4d7").then(n)}},{name:"v-2566e137",path:"/use/webui.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2566e137").then(n)}},{path:"*",component:As}],Ls={title:"Theengs OpenMQTTGateway DEVELOPMENT SHA:e91086 TEST ONLY",description:"One gateway, many technologies: MQTT gateway for ESP8266 or ESP32 with bidirectional 433mhz/315mhz/868mhz, Infrared communications, BLE, LoRa, beacons detection, mi flora / mi jia / LYWSD02/ Mi Scale compatibility, SMS & LORA.",base:"/dev/",headTags:[["meta",{name:"viewport",content:"width=device-width, initial-scale=1"}],["link",{rel:"apple-touch-icon",sizes:"180x180",href:".apple-touch-icon.png"}],["link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/dev/favicon-32x32.png"}],["link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/dev/favicon-16x16.png"}],["link",{rel:"manifest",href:"/dev/manifest.json"}],["meta",{name:"theme-color",content:"#3eaf7c"}],["meta",{name:"apple-mobile-web-app-capable",content:"yes"}],["meta",{name:"apple-mobile-web-app-status-bar-style",content:"black"}],["link",{rel:"mask-icon",href:"/dev/icons/safari-pinned-tab.svg",color:"#3eaf7c"}],["meta",{name:"msapplication-TileImage",content:"/favicon-144x144.png"}],["meta",{name:"msapplication-TileColor",content:"#000000"}],["script",{type:"module",src:"https://unpkg.com/esp-web-tools@9.4.3/dist/web/install-button.js?module"}]],pages:[{frontmatter:{},regularPath:"/",relativePath:"README.md",key:"v-96f26938",path:"/",headers:[{level:2,title:"Using OpenMQTTGateway ?",slug:"using-openmqttgateway"},{level:2,title:"Products powered by OpenMQTTGateway",slug:"products-powered-by-openmqttgateway"},{level:3,title:"Theengs Bridge, BLE gateway with external antenna",slug:"theengs-bridge-ble-gateway-with-external-antenna"},{level:3,title:"Theengs Plug, BLE gateway and Smart Plug",slug:"theengs-plug-ble-gateway-and-smart-plug"},{level:2,title:"Media",slug:"media"},{level:3,title:"Theengs Plug",slug:"theengs-plug"},{level:3,title:"433Mhz and BLE",slug:"_433mhz-and-ble"},{level:3,title:"BLE",slug:"ble"},{level:3,title:"433Mhz",slug:"_433mhz"},{level:3,title:"LORA",slug:"lora"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate AWS IOT",frontmatter:{},regularPath:"/integrate/aws_iot.html",relativePath:"integrate/aws_iot.md",key:"v-347fe277",path:"/integrate/aws_iot.html",headers:[{level:2,title:"Create a thing",slug:"create-a-thing"},{level:2,title:"Create a policy",slug:"create-a-policy"},{level:2,title:"Create a certificate",slug:"create-a-certificate"},{level:2,title:"Attach Policy with certificate",slug:"attach-policy-with-certificate"},{level:2,title:"Activate certificate and attach it to Thing",slug:"activate-certificate-and-attach-it-to-thing"},{level:2,title:"Find AWS EndPoint",slug:"find-aws-endpoint"},{level:2,title:"Gather the information for OpenMQTTGateway configuration",slug:"gather-the-information-for-openmqttgateway-configuration"},{level:2,title:"Modify OpenMQTTGateway configuration",slug:"modify-openmqttgateway-configuration"},{level:2,title:"Build and upload",slug:"build-and-upload"},{level:2,title:"Connect to a WiFi Access point see portal",slug:"connect-to-a-wifi-access-point-see-portal"},{level:2,title:"Verify that you receive data in AWS",slug:"verify-that-you-receive-data-in-aws"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate Home Assistant",frontmatter:{},regularPath:"/integrate/home_assistant.html",relativePath:"integrate/home_assistant.md",key:"v-06f4d0aa",path:"/integrate/home_assistant.html",headers:[{level:2,title:"Automatic integration with Auto discovery",slug:"automatic-integration-with-auto-discovery"},{level:3,title:"RTL_433 auto discovery specificity",slug:"rtl-433-auto-discovery-specificity"},{level:3,title:"RF (RCSwitch based gateway) Auto discovery specificity",slug:"rf-rcswitch-based-gateway-auto-discovery-specificity"},{level:2,title:"Manual integration",slug:"manual-integration"},{level:3,title:"Pir Sensor",slug:"pir-sensor"},{level:3,title:"Door sensor",slug:"door-sensor"},{level:3,title:"Motion sensor",slug:"motion-sensor"},{level:3,title:"Switches",slug:"switches"},{level:3,title:"RF gateway mode - Pilight, RF, kaku",slug:"rf-gateway-mode-pilight-rf-kaku"},{level:3,title:"Mijia Thermometer BLE",slug:"mijia-thermometer-ble"},{level:3,title:"Xiaomi Mi Scale V2 BLE (XMTZC05HM)",slug:"xiaomi-mi-scale-v2-ble-xmtzc05hm"},{level:3,title:"MQTT Room Presence",slug:"mqtt-room-presence"},{level:3,title:"Temperature sensor",slug:"temperature-sensor"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate Jeedom",frontmatter:{},regularPath:"/integrate/jeedom.html",relativePath:"integrate/jeedom.md",key:"v-b936cd92",path:"/integrate/jeedom.html",headers:[{level:2,title:"Installation of jMQTT",slug:"installation-of-jmqtt"},{level:2,title:"Configuration the Broker in jMQTT",slug:"configuration-the-broker-in-jmqtt"},{level:2,title:"Creation of the OMG device",slug:"creation-of-the-omg-device"},{level:3,title:"Creation of the Last Will and Testament command",slug:"creation-of-the-last-will-and-testament-command"},{level:3,title:"Creation of an action command to restart the OMG device",slug:"creation-of-an-action-command-to-restart-the-omg-device"},{level:2,title:'Creation of the equipment for the "Xiaomi Mi Jia" sensor',slug:"creation-of-the-equipment-for-the-xiaomi-mi-jia-sensor"},{level:3,title:"Creation of an unknown/unidentified BT device",slug:"creation-of-an-unknown-unidentified-bt-device"},{level:3,title:"Creation of a known/identified BT device",slug:"creation-of-a-known-identified-bt-device"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate Node-Red",frontmatter:{},regularPath:"/integrate/node_red.html",relativePath:"integrate/node_red.md",key:"v-73cb197f",path:"/integrate/node_red.html",headers:[{level:2,title:"Integrate BLE sensors, devices and display a dashboard",slug:"integrate-ble-sensors-devices-and-display-a-dashboard"},{level:3,title:"Broker connection",slug:"broker-connection"},{level:3,title:"Json message processing",slug:"json-message-processing"},{level:3,title:"Dashboard",slug:"dashboard"},{level:2,title:"Integrate RF",slug:"integrate-rf"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate OPENHAB2",frontmatter:{},regularPath:"/integrate/openhab2.html",relativePath:"integrate/openhab2.md",key:"v-095f6301",path:"/integrate/openhab2.html",headers:[{level:2,title:"Auto discovery through home assistant convention",slug:"auto-discovery-through-home-assistant-convention"},{level:2,title:"MQTT 2 manual setup >=Openhab2.4",slug:"mqtt-2-manual-setup-openhab2-4"},{level:2,title:"For a mi flora or mi jia temperature :",slug:"for-a-mi-flora-or-mi-jia-temperature"},{level:2,title:'For a switch channel, add a channel by choosing the type "On/Off switch"',slug:"for-a-switch-channel-add-a-channel-by-choosing-the-type-on-off-switch"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate OPENHAB 3/4",frontmatter:{},regularPath:"/integrate/openhab3.html",relativePath:"integrate/openhab3.md",key:"v-08357a02",path:"/integrate/openhab3.html",headers:[{level:2,title:"Prerequisites",slug:"prerequisites"},{level:2,title:"IP address (if your broker is installed on the same server as OpenHAB)",slug:"ip-address-if-your-broker-is-installed-on-the-same-server-as-openhab"},{level:2,title:"Install the MQTT binding",slug:"install-the-mqtt-binding"},{level:2,title:"Install Jinja and JSONPath Transformations",slug:"install-jinja-and-jsonpath-transformations"},{level:2,title:"Upload OpenMQTTGateway to an ESP32",slug:"upload-openmqttgateway-to-an-esp32"},{level:2,title:"Configure OpenMQTTGateway from the web portal",slug:"configure-openmqttgateway-from-the-web-portal"},{level:2,title:"Adding the things",slug:"adding-the-things"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Community participation",frontmatter:{},regularPath:"/participate/community.html",relativePath:"participate/community.md",key:"v-2db1db37",path:"/participate/community.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Adding protocols",frontmatter:{},regularPath:"/participate/adding-protocols.html",relativePath:"participate/adding-protocols.md",key:"v-e115e73a",path:"/participate/adding-protocols.html",headers:[{level:2,title:"RF or IR",slug:"rf-or-ir"},{level:2,title:"BLE",slug:"ble"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Supporting the project",frontmatter:{},regularPath:"/participate/support.html",relativePath:"participate/support.md",key:"v-f3fbff12",path:"/participate/support.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"M5 Boards",frontmatter:{},regularPath:"/prerequisites/M5.html",relativePath:"prerequisites/M5.md",key:"v-412f01af",path:"/prerequisites/M5.html",headers:[{level:2,title:"M5StickC and M5Stack",slug:"m5stickc-and-m5stack"},{level:3,title:"3 low power modes",slug:"_3-low-power-modes"},{level:3,title:"Start screen",slug:"start-screen"},{level:3,title:"Sleep screen",slug:"sleep-screen"},{level:3,title:"Log display in case of warning",slug:"log-display-in-case-of-warning"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Development contributions",frontmatter:{},regularPath:"/participate/development.html",relativePath:"participate/development.md",key:"v-117d8812",path:"/participate/development.html",headers:[{level:2,title:"Nightly builds",slug:"nightly-builds"},{level:2,title:"Developer Certificate Of Origin",slug:"developer-certificate-of-origin"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Boards",frontmatter:{},regularPath:"/prerequisites/board.html",relativePath:"prerequisites/board.md",key:"v-01bee537",path:"/prerequisites/board.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Broker",frontmatter:{},regularPath:"/prerequisites/broker.html",relativePath:"prerequisites/broker.md",key:"v-56e06d4d",path:"/prerequisites/broker.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Controller",frontmatter:{},regularPath:"/prerequisites/controller.html",relativePath:"prerequisites/controller.md",key:"v-5e0eec87",path:"/prerequisites/controller.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Devices",frontmatter:{},regularPath:"/prerequisites/devices.html",relativePath:"prerequisites/devices.md",key:"v-204c7852",path:"/prerequisites/devices.html",headers:[{level:2,title:"For radio frequency devices",slug:"for-radio-frequency-devices"},{level:2,title:"For BLE devices",slug:"for-ble-devices"},{level:2,title:"For infrared IR devices",slug:"for-infrared-ir-devices"},{level:2,title:"LORA",slug:"lora"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Parts",frontmatter:{},regularPath:"/prerequisites/parts.html",relativePath:"prerequisites/parts.md",key:"v-29f81312",path:"/prerequisites/parts.html",headers:[{level:2,title:"Main parts",slug:"main-parts"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Actuators",frontmatter:{},regularPath:"/setitup/actuators.html",relativePath:"setitup/actuators.md",key:"v-0c47cd52",path:"/setitup/actuators.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"},{level:2,title:"Pinout",slug:"pinout"},{level:2,title:"Somfy RTS",slug:"somfy-rts"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"BLE gateway",frontmatter:{},regularPath:"/setitup/ble.html",relativePath:"setitup/ble.md",key:"v-cf2ed192",path:"/setitup/ble.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"GSM 2G gateway",frontmatter:{},regularPath:"/setitup/gsm.html",relativePath:"setitup/gsm.md",key:"v-b5aec012",path:"/setitup/gsm.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"},{level:2,title:"Hardware setup",slug:"hardware-setup"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"IR gateway",frontmatter:{},regularPath:"/setitup/ir.html",relativePath:"setitup/ir.md",key:"v-eab731fa",path:"/setitup/ir.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"},{level:2,title:"Pinout",slug:"pinout"},{level:2,title:"ESP8266 Hardware setup",slug:"esp8266-hardware-setup"},{level:2,title:"ESP32 Hardware setup",slug:"esp32-hardware-setup"},{level:2,title:"Credits",slug:"credits"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"LoRa gateway",frontmatter:{},regularPath:"/setitup/lora.html",relativePath:"setitup/lora.md",key:"v-0d1e8e9e",path:"/setitup/lora.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"RF gateway (433mhz/315mhz)",frontmatter:{},regularPath:"/setitup/rf.html",relativePath:"setitup/rf.md",key:"v-2fe62c26",path:"/setitup/rf.html",headers:[{level:2,title:"Protocols, modules and library",slug:"protocols-modules-and-library"},{level:2,title:"Assembly/soldering required parts",slug:"assembly-soldering-required-parts"},{level:3,title:"SRX STX Pinout",slug:"srx-stx-pinout"},{level:3,title:"CC1101 Pinout",slug:"cc1101-pinout"},{level:2,title:"ESP32 Hardware setup",slug:"esp32-hardware-setup"},{level:2,title:"ESP8266 Hardware setup",slug:"esp8266-hardware-setup"},{level:2,title:"SONOFF RF Bridge Hardware setup",slug:"sonoff-rf-bridge-hardware-setup"},{level:2,title:"SONOFF RFR3 Hardware setup",slug:"sonoff-rfr3-hardware-setup"},{level:2,title:"WIFI RF GATEWAY Hardware setup",slug:"wifi-rf-gateway-hardware-setup"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Sensors",frontmatter:{},regularPath:"/setitup/sensors.html",relativePath:"setitup/sensors.md",key:"v-aa1cc612",path:"/setitup/sensors.html",headers:[{level:2,title:"Compatible sensors",slug:"compatible-sensors"},{level:2,title:"Pinout",slug:"pinout"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Serial/RS232 gateway",frontmatter:{},regularPath:"/setitup/serial.html",relativePath:"setitup/serial.md",key:"v-255607ed",path:"/setitup/serial.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"},{level:2,title:"Pinout",slug:"pinout"},{level:2,title:"ESP8266 Hardware setup",slug:"esp8266-hardware-setup"},{level:2,title:"ESP32 Hardware setup",slug:"esp32-hardware-setup"},{level:2,title:"Credits",slug:"credits"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"(Option 2) Upload ready-to-go binaries",frontmatter:{},regularPath:"/upload/binaries.html",relativePath:"upload/binaries.md",key:"v-6e14dcd7",path:"/upload/binaries.html",headers:[{level:2,title:"ESP32",slug:"esp32"},{level:3,title:"Linux - esptool.py",slug:"linux-esptool-py"},{level:3,title:"Mac - esptool.py",slug:"mac-esptool-py"},{level:2,title:"ESP8266",slug:"esp8266"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Advanced configuration of the gateway",frontmatter:{},regularPath:"/upload/advanced-configuration.html",relativePath:"upload/advanced-configuration.md",key:"v-7df515d2",path:"/upload/advanced-configuration.html",headers:[{level:2,title:"Secure connection to the broker",slug:"secure-connection-to-the-broker"},{level:3,title:"Prerequisites",slug:"prerequisites"},{level:3,title:"Configure secure connection in the gateway",slug:"configure-secure-connection-in-the-gateway"},{level:2,title:'Add the received "value" at the end of the topic',slug:"add-the-received-value-at-the-end-of-the-topic"},{level:2,title:"Auto discovery",slug:"auto-discovery"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"(Option 3) Upload your configurations",frontmatter:{},regularPath:"/upload/builds.html",relativePath:"upload/builds.md",key:"v-303bd052",path:"/upload/builds.html",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Configure & Upload with PlatformIO",slug:"configure-upload-with-platformio"},{level:3,title:"(Option A) Creating a portable config file",slug:"option-a-creating-a-portable-config-file"},{level:3,title:"(Option B) Editing files directly",slug:"option-b-editing-files-directly"},{level:2,title:"API",slug:"api"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"(Option 4) Build from the web",frontmatter:{},regularPath:"/upload/gitpod.html",relativePath:"upload/gitpod.md",key:"v-2c32e617",path:"/upload/gitpod.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Wifi and MQTT configuration",frontmatter:{},regularPath:"/upload/portal.html",relativePath:"upload/portal.md",key:"v-27c660f7",path:"/upload/portal.html",headers:[{level:2,title:"Configuration portal",slug:"configuration-portal"},{level:2,title:"Build time configuration",slug:"build-time-configuration"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Troubleshooting",frontmatter:{},regularPath:"/upload/troubleshoot.html",relativePath:"upload/troubleshoot.md",key:"v-246d3f77",path:"/upload/troubleshoot.html",headers:[{level:2,title:"Compilation/build error",slug:"compilation-build-error"},{level:2,title:"ESP32 compilation errors related to WiFi",slug:"esp32-compilation-errors-related-to-wifi"},{level:2,title:"Not able to send or receive RF or IR",slug:"not-able-to-send-or-receive-rf-or-ir"},{level:2,title:"Repetitive MQTT disconnections or/and commands sent to the gateway not taken into account",slug:"repetitive-mqtt-disconnections-or-and-commands-sent-to-the-gateway-not-taken-into-account"},{level:2,title:"OMG ignores messages sent to it via MQTT",slug:"omg-ignores-messages-sent-to-it-via-mqtt"},{level:2,title:"ESP Continuous restart or strange behaviour:",slug:"esp-continuous-restart-or-strange-behaviour"},{level:2,title:"ESP does not connect to broker with TLS enabled",slug:"esp-does-not-connect-to-broker-with-tls-enabled"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"(Option 1) Upload from the web",frontmatter:{pageClass:"table-generated-page"},regularPath:"/upload/web-install.html",relativePath:"upload/web-install.md",key:"v-2b7b8f3b",path:"/upload/web-install.html",headers:[{level:2,title:"Using OpenMQTTGateway ?",slug:"using-openmqttgateway"},{level:2,title:"Environments characteristics",slug:"environments-characteristics"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Actuators",frontmatter:{},regularPath:"/use/actuators.html",relativePath:"use/actuators.md",key:"v-0d819412",path:"/use/actuators.html",headers:[{level:2,title:"ON/OFF Functionality",slug:"on-off-functionality"},{level:3,title:"Standard ON/OFF control",slug:"standard-on-off-control"},{level:3,title:"Pulse control for short activations",slug:"pulse-control-for-short-activations"},{level:2,title:"FASTLED",slug:"fastled"},{level:3,title:"The FASTLED module support 2 different operation modes",slug:"the-fastled-module-support-2-different-operation-modes"},{level:3,title:"Hardware wiring",slug:"hardware-wiring"},{level:2,title:"PWM",slug:"pwm"},{level:3,title:"Configuration",slug:"configuration"},{level:3,title:"Usage",slug:"usage"},{level:2,title:"Somfy RTS",slug:"somfy-rts"},{level:3,title:"Setup",slug:"setup"},{level:3,title:"Commands",slug:"commands"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Bluetooth ESP32 gateway",frontmatter:{title:"Bluetooth ESP32 gateway",description:"Versatile Bluetooth gateway that scans and decodes data from various Bluetooth Low Energy (BLE) devices. It integrates seamlessly with MQTT brokers and controllers like Home Assistant and OpenHAB. Monitor temperature, humidity, pressure, and more for smarter control."},regularPath:"/use/ble.html",relativePath:"use/ble.md",key:"v-bbb970d2",path:"/use/ble.html",headers:[{level:2,title:"Products powered by OpenMQTTGateway",slug:"products-powered-by-openmqttgateway"},{level:3,title:"Theengs Bridge, BLE gateway with external antenna",slug:"theengs-bridge-ble-gateway-with-external-antenna"},{level:3,title:"Theengs Plug, BLE gateway and Smart Plug",slug:"theengs-plug-ble-gateway-and-smart-plug"},{level:2,title:"Disable or enable the BLE gateway (default: true, available with HA discovery)",slug:"disable-or-enable-the-ble-gateway-default-true-available-with-ha-discovery"},{level:2,title:"Receiving signals from compatible BLE sensors to publish it to an MQTT broker.",slug:"receiving-signals-from-compatible-ble-sensors-to-publish-it-to-an-mqtt-broker"},{level:2,title:"Receiving signals from BLE devices for Device Tracker detection",slug:"receiving-signals-from-ble-devices-for-device-tracker-detection"},{level:2,title:"Receiving signals from BLE devices for Presence detection",slug:"receiving-signals-from-ble-devices-for-presence-detection"},{level:2,title:"Receiving signals from BLE devices with accelerometers for movement detection",slug:"receiving-signals-from-ble-devices-with-accelerometers-for-movement-detection"},{level:2,title:"Setting a white or black list",slug:"setting-a-white-or-black-list"},{level:2,title:"Setting the time between BLE scans and force a scan (available with HA discovery)",slug:"setting-the-time-between-ble-scans-and-force-a-scan-available-with-ha-discovery"},{level:2,title:"Setting the time between connection attempts (default: 60min, available with HA discovery)",slug:"setting-the-time-between-connection-attempts-default-60min-available-with-ha-discovery"},{level:2,title:"Setting if the gateway publishes all the BLE devices scanned or only the detected sensors (default: false, available with HA discovery)",slug:"setting-if-the-gateway-publishes-all-the-ble-devices-scanned-or-only-the-detected-sensors-default-false-available-with-ha-discovery"},{level:2,title:"Setting if the gateway publishes known devices which randomly change their MAC address (default: false)",slug:"setting-if-the-gateway-publishes-known-devices-which-randomly-change-their-mac-address-default-false"},{level:2,title:"Setting if the gateway use adaptive scanning (default: true, available with HA discovery)",slug:"setting-if-the-gateway-use-adaptive-scanning-default-true-available-with-ha-discovery"},{level:2,title:"Setting the time between active scanning (available with HA discovery)",slug:"setting-the-time-between-active-scanning-available-with-ha-discovery"},{level:2,title:"Setting the duration of a scan (available with HA discovery)",slug:"setting-the-duration-of-a-scan-available-with-ha-discovery"},{level:2,title:"Setting if the gateway connects to BLE devices eligibles (default: true, available with HA discovery)",slug:"setting-if-the-gateway-connects-to-ble-devices-eligibles-default-true-available-with-ha-discovery"},{level:2,title:"Setting if the gateway publish into Home Assistant Home presence topic (default: false, available with HA discovery)",slug:"setting-if-the-gateway-publish-into-home-assistant-home-presence-topic-default-false-available-with-ha-discovery"},{level:2,title:"Setting if the gateway uses iBeacon UUID as topic, instead of (random) MAC address (default: false)",slug:"setting-if-the-gateway-uses-ibeacon-uuid-as-topic-instead-of-random-mac-address-default-false"},{level:2,title:"Setting the minimum RSSI accepted to publish device data (default:-100)",slug:"setting-the-minimum-rssi-accepted-to-publish-device-data-default-100"},{level:2,title:"Store BLE configuration into the gateway",slug:"store-ble-configuration-into-the-gateway"},{level:2,title:"Controlling devices",slug:"controlling-devices"},{level:2,title:"Read/write BLE characteristics over MQTT",slug:"read-write-ble-characteristics-over-mqtt"},{level:3,title:"Example write command",slug:"example-write-command"},{level:3,title:"Example read command",slug:"example-read-command"},{level:2,title:"SwitchBot Bot control (available with HA discovery)",slug:"switchbot-bot-control-available-with-ha-discovery"},{level:3,title:"Set the SwitchBot Bot state to ON:",slug:"set-the-switchbot-bot-state-to-on"},{level:3,title:"Set the SwitchBot Bot state to OFF:",slug:"set-the-switchbot-bot-state-to-off"},{level:3,title:"Set the SwitchBot Bot to PRESS:",slug:"set-the-switchbot-bot-to-press"},{level:3,title:"Set the SwitchBot Bot to go UP:",slug:"set-the-switchbot-bot-to-go-up"},{level:3,title:"Set the SwitchBot Bot to go DOWN:",slug:"set-the-switchbot-bot-to-go-down"},{level:2,title:"SwitchBot Blind Tilt control (available with HA discovery)",slug:"switchbot-blind-tilt-control-available-with-ha-discovery"},{level:3,title:"Set the SwitchBot Blind Tilt state to OPEN:",slug:"set-the-switchbot-blind-tilt-state-to-open"},{level:3,title:"Set the SwitchBot Blind Tilt state to CLOSE_DOWN:",slug:"set-the-switchbot-blind-tilt-state-to-close-down"},{level:3,title:"Set the SwitchBot Blind Tilt state to CLOSE_UP:",slug:"set-the-switchbot-blind-tilt-state-to-close-up"},{level:3,title:"Set the SwitchBot Blind Tilt state to a percentage (0-100):",slug:"set-the-switchbot-blind-tilt-state-to-a-percentage-0-100"},{level:3,title:"Set the SwitchBot Blind Tilt to Stop:",slug:"set-the-switchbot-blind-tilt-to-stop"},{level:3,title:"Response (assuming success):",slug:"response-assuming-success"},{level:2,title:"SwitchBot Curtain (2/3) control (available with HA discovery)",slug:"switchbot-curtain-2-3-control-available-with-ha-discovery"},{level:3,title:"Set the SwitchBot Curtain state to OPEN:",slug:"set-the-switchbot-curtain-state-to-open"},{level:3,title:"Set the SwitchBot Curtain state to CLOSE:",slug:"set-the-switchbot-curtain-state-to-close"},{level:3,title:"Set the SwitchBot Curtain to a percentage (0-100):",slug:"set-the-switchbot-curtain-to-a-percentage-0-100"},{level:3,title:"Set the SwitchBot Curtain to Stop:",slug:"set-the-switchbot-curtain-to-stop"},{level:3,title:"Response (assuming success):",slug:"response-assuming-success-2"},{level:2,title:"ADVANCED: Setting up an external decoder",slug:"advanced-setting-up-an-external-decoder"},{level:2,title:"ADVANCED: Filtering out connectable devices (default: false)",slug:"advanced-filtering-out-connectable-devices-default-false"},{level:2,title:"ADVANCED: Advertisement and advanced data (default: false, available with HA discovery)",slug:"advanced-advertisement-and-advanced-data-default-false-available-with-ha-discovery"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Displays",frontmatter:{},regularPath:"/use/displays.html",relativePath:"use/displays.md",key:"v-288d7b9e",path:"/use/displays.html",headers:[{level:2,title:"SSD1306 Display (Heltec SX127X, LILYGO® LoRa32 boards, generic SSD1306 displays)",slug:"ssd1306-display-heltec-sx127x-lilygo®-lora32-boards-generic-ssd1306-displays"},{level:3,title:"Display ON/OFF",slug:"display-on-off"},{level:3,title:"Brightness",slug:"brightness"},{level:3,title:"Metric or Imperial property units",slug:"metric-or-imperial-property-units"},{level:3,title:"Rotating the display by 180 degrees",slug:"rotating-the-display-by-180-degrees"},{level:3,title:"Display idle Logo",slug:"display-idle-logo"},{level:3,title:"Setting the log output",slug:"setting-the-log-output"},{level:3,title:"Displaying Module json messages (default)",slug:"displaying-module-json-messages-default"},{level:3,title:"Store the current display configuration in the gateway",slug:"store-the-current-display-configuration-in-the-gateway"},{level:3,title:"Connecting a generic SSD1306 display to ESP32",slug:"connecting-a-generic-ssd1306-display-to-esp32"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"System commands (ESP only)",frontmatter:{},regularPath:"/use/gateway.html",relativePath:"use/gateway.md",key:"v-20c05837",path:"/use/gateway.html",headers:[{level:2,title:"Restart the ESP",slug:"restart-the-esp"},{level:2,title:"Erase the ESP settings",slug:"erase-the-esp-settings"},{level:2,title:"Retrieve current status of the ESP",slug:"retrieve-current-status-of-the-esp"},{level:2,title:"Auto discovery",slug:"auto-discovery"},{level:3,title:"Deactivate",slug:"deactivate"},{level:3,title:"Activate",slug:"activate"},{level:2,title:"Activate Offline mode",slug:"activate-offline-mode"},{level:2,title:"Change the WiFi credentials",slug:"change-the-wifi-credentials"},{level:2,title:"Change the gateway password",slug:"change-the-gateway-password"},{level:2,title:"Change the MQTT broker credentials",slug:"change-the-mqtt-broker-credentials"},{level:2,title:"Change the MQTT main topic, discovery prefix, and or gateway name",slug:"change-the-mqtt-main-topic-discovery-prefix-and-or-gateway-name"},{level:2,title:"Switching brokers and using signed and client certificates",slug:"switching-brokers-and-using-signed-and-client-certificates"},{level:2,title:"Saving/Loading connection parameters/certificates at runtime",slug:"saving-loading-connection-parameters-certificates-at-runtime"},{level:3,title:"Storing and Loading Certificates",slug:"storing-and-loading-certificates"},{level:3,title:"Use Case: Changing a Group of Certificates",slug:"use-case-changing-a-group-of-certificates"},{level:2,title:"MQTT",slug:"mqtt"},{level:2,title:"Serial",slug:"serial"},{level:2,title:"Change the LED indicator brightness",slug:"change-the-led-indicator-brightness"},{level:2,title:"Understanding LED Indicators in OpenMQTTGateway",slug:"understanding-led-indicators-in-openmqttgateway"},{level:2,title:"LED Color Guide",slug:"led-color-guide"},{level:2,title:"Understanding Gateway States",slug:"understanding-gateway-states"},{level:3,title:"Power On",slug:"power-on"},{level:3,title:"Processing",slug:"processing"},{level:3,title:"Waiting for Onboarding",slug:"waiting-for-onboarding"},{level:3,title:"Onboarding in Progress",slug:"onboarding-in-progress"},{level:3,title:"Network Connected",slug:"network-connected"},{level:3,title:"Network Disconnected",slug:"network-disconnected"},{level:3,title:"MQTT Broker Connected",slug:"mqtt-broker-connected"},{level:3,title:"MQTT Broker Disconnected",slug:"mqtt-broker-disconnected"},{level:3,title:"Offline",slug:"offline"},{level:3,title:"Local OTA Update",slug:"local-ota-update"},{level:3,title:"Remote OTA Update",slug:"remote-ota-update"},{level:3,title:"Error",slug:"error"},{level:3,title:"Actuator On/Off",slug:"actuator-on-off"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"LoRa gateway",frontmatter:{title:"LoRa gateway",description:"Explore the LoRa MQTT gateway, designed for integration with devices utilizing LoRa technology, including the MakerFab soil and moisture sensor, devices from PricelessTookit. Unlock long range communication with the power of LoRa.."},regularPath:"/use/lora.html",relativePath:"use/lora.md",key:"v-749f316f",path:"/use/lora.html",headers:[{level:2,title:"What is a LoRa gateway",slug:"what-is-a-lora-gateway"},{level:2,title:"Configuring the LoRa gateway",slug:"configuring-the-lora-gateway"},{level:2,title:"Receiving data from LoRa signal",slug:"receiving-data-from-lora-signal"},{level:2,title:"Send data by MQTT to convert it on LoRa signal",slug:"send-data-by-mqtt-to-convert-it-on-lora-signal"},{level:2,title:"Send data by MQTT with advanced LoRa parameters",slug:"send-data-by-mqtt-with-advanced-lora-parameters"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Boards",frontmatter:{},regularPath:"/use/boards.html",relativePath:"use/boards.md",key:"v-3043a2b9",path:"/use/boards.html",headers:[{level:2,title:"ESP",slug:"esp"},{level:3,title:"Erasing the flash",slug:"erasing-the-flash"},{level:3,title:"Wifi interference on sensors when using an ESP",slug:"wifi-interference-on-sensors-when-using-an-esp"},{level:3,title:"Low power mode for ESP32",slug:"low-power-mode-for-esp32"},{level:2,title:"M5StickC, M5StickC Plus or M5Stack",slug:"m5stickc-m5stickc-plus-or-m5stack"},{level:3,title:"Behaviour",slug:"behaviour"},{level:3,title:"Setting the log output",slug:"setting-the-log-output"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Infrared gateway",frontmatter:{title:"Infrared gateway",description:"Unlock the potential of Infrared technology with our universal gateway. Decode signals from various devices, and integrate seamlessly with MQTT systems abd controllers like Home Assistant and OpenHAB."},regularPath:"/use/ir.html",relativePath:"use/ir.md",key:"v-a9ffe0fe",path:"/use/ir.html",headers:[{level:2,title:"Receiving data from IR signal",slug:"receiving-data-from-ir-signal"},{level:2,title:"Send data by MQTT to convert it on IR signal",slug:"send-data-by-mqtt-to-convert-it-on-ir-signal"},{level:2,title:"Send data by MQTT from Global Caché database to convert it on IR signal",slug:"send-data-by-mqtt-from-global-cache-database-to-convert-it-on-ir-signal"},{level:2,title:"Send data by MQTT with advanced IR parameters",slug:"send-data-by-mqtt-with-advanced-ir-parameters"},{level:2,title:"Send raw IR data by MQTT",slug:"send-raw-ir-data-by-mqtt"},{level:2,title:"Repeat the IR signal OpenMQTTGateway receive",slug:"repeat-the-ir-signal-openmqttgateway-receive"},{level:2,title:"Raw IR signal forwarding",slug:"raw-ir-signal-forwarding"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"RFM69 gateway",frontmatter:{},regularPath:"/use/rfm69.html",relativePath:"use/rfm69.md",key:"v-21b208b7",path:"/use/rfm69.html",headers:[{level:3,title:"Receiving data from RFM signal",slug:"receiving-data-from-rfm-signal"},{level:3,title:"Send data by MQTT to convert it on RFM69 signal",slug:"send-data-by-mqtt-to-convert-it-on-rfm69-signal"},{level:3,title:"Send data by MQTT with advanced RFM69 parameters",slug:"send-data-by-mqtt-with-advanced-rfm69-parameters"},{level:3,title:"RFM69 acknowledgment",slug:"rfm69-acknowledgment"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"RF gateways (RTL_433/RCSwitch/RF/RF2)",frontmatter:{title:"RF gateways (RTL_433/RCSwitch/RF/RF2)",description:"Unlock the potential of RF 433 MHz technology with our universal gateway. Decode signals from various devices, and integrate seamlessly with MQTT systems and controllers like Home Assistant and OpenHAB."},regularPath:"/use/rf.html",relativePath:"use/rf.md",key:"v-947f362a",path:"/use/rf.html",headers:[{level:2,title:"What is an RF gateway",slug:"what-is-an-rf-gateway"},{level:2,title:"Common parameters accross modules",slug:"common-parameters-accross-modules"},{level:3,title:"Change default frequency (SX127X and CC1101)",slug:"change-default-frequency-sx127x-and-cc1101"},{level:3,title:"Changing Active Receiver Modules",slug:"changing-active-receiver-modules"},{level:2,title:"RTL_433 device decoders",slug:"rtl-433-device-decoders"},{level:3,title:"Supported hardware combinations",slug:"supported-hardware-combinations"},{level:3,title:"Supported Decoders",slug:"supported-decoders"},{level:3,title:"Change Signal RSSI Threshold Delta",slug:"change-signal-rssi-threshold-delta"},{level:3,title:"Retrieve current status of receiver",slug:"retrieve-current-status-of-receiver"},{level:2,title:"RCSwitch based gateway",slug:"rcswitch-based-gateway"},{level:3,title:"Handling RF signal over MQTT",slug:"handling-rf-signal-over-mqtt"},{level:3,title:"Send data by MQTT with advanced RF parameters",slug:"send-data-by-mqtt-with-advanced-rf-parameters"},{level:2,title:"Pilight gateway",slug:"pilight-gateway"},{level:3,title:"Receiving data from RF signal",slug:"receiving-data-from-rf-signal-2"},{level:3,title:"Limit Protocols",slug:"limit-protocols"},{level:3,title:"Send data by MQTT to transmit a RF signal",slug:"send-data-by-mqtt-to-transmit-a-rf-signal"},{level:2,title:"RF with SONOFF RF BRIDGE",slug:"rf-with-sonoff-rf-bridge"},{level:3,title:"Receiving data from RF signal",slug:"receiving-data-from-rf-signal-3"},{level:3,title:"Send data by MQTT to convert it on RF signal",slug:"send-data-by-mqtt-to-convert-it-on-rf-signal"},{level:3,title:"Send data by MQTT with advanced RF parameters",slug:"send-data-by-mqtt-with-advanced-rf-parameters-2"},{level:2,title:"RF2 gateway KAKU",slug:"rf2-gateway-kaku"},{level:3,title:"Receiving data from KAKU signal",slug:"receiving-data-from-kaku-signal"},{level:3,title:"Send data by MQTT to convert it on KAKU signal",slug:"send-data-by-mqtt-to-convert-it-on-kaku-signal"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"GSM 2G gateway",frontmatter:{},regularPath:"/use/gsm.html",relativePath:"use/gsm.md",key:"v-131b9357",path:"/use/gsm.html",headers:[{level:2,title:"Receiving SMS from 2G",slug:"receiving-sms-from-2g"},{level:2,title:"Send data by MQTT to send an SMS message with A6/7",slug:"send-data-by-mqtt-to-send-an-sms-message-with-a6-7"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"RS232/Serial gateway",frontmatter:{},regularPath:"/use/serial.html",relativePath:"use/serial.md",key:"v-93d2a72a",path:"/use/serial.html",headers:[{level:2,title:"Sending an SERIAL message",slug:"sending-an-serial-message"},{level:2,title:"Receiving an SERIAL message",slug:"receiving-an-serial-message"},{level:3,title:"Single MQTT message mode (default)",slug:"single-mqtt-message-mode-default"},{level:3,title:"JSON mode",slug:"json-mode"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Sensors",frontmatter:{},regularPath:"/use/sensors.html",relativePath:"use/sensors.md",key:"v-2494b4d7",path:"/use/sensors.html",headers:[{level:3,title:"ADC",slug:"adc"},{level:3,title:"DHT",slug:"dht"},{level:3,title:"HTU21",slug:"htu21"},{level:3,title:"AHTx0 (AHT10 and AHT20)",slug:"ahtx0-aht10-and-aht20"},{level:3,title:"DS18x20",slug:"ds18x20"},{level:3,title:"HCSR501",slug:"hcsr501"},{level:3,title:"RN8209",slug:"rn8209"},{level:3,title:"Touch",slug:"touch"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"WebUI",frontmatter:{},regularPath:"/use/webui.html",relativePath:"use/webui.md",key:"v-2566e137",path:"/use/webui.html",headers:[{level:2,title:"WiFi",slug:"wifi"},{level:2,title:"MQTT",slug:"mqtt"},{level:2,title:"WebUI",slug:"webui-2"},{level:2,title:"Bluetooth Low Energy - BLE",slug:"bluetooth-low-energy-ble"},{level:2,title:"Logging",slug:"logging"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3}],themeConfig:{repo:"1technophile/OpenMQTTGateway",docsDir:"docs",smoothScroll:!0,search:!1,docsBranch:"development",lastUpdated:"Last Updated",editLinks:!0,nav:[{text:"Home",link:"https://www.theengs.io",target:"_self",rel:""},{text:"Use cases",items:[{text:"Smart Home",link:"https://www.theengs.io/usecases/smarthome.html",target:"_self",rel:""},{text:"IoT",link:"https://www.theengs.io/usecases/iot.html",target:"_self",rel:""},{text:"Research",link:"https://www.theengs.io/usecases/research.html",target:"_self",rel:""}]},{text:"Solutions",items:[{text:"Hardware",items:[{text:"Theengs Plug",link:"https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumption",target:"_self",rel:""},{text:"Theengs Bridge",link:"https://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antenna",target:"_self",rel:""}]},{text:"Software",items:[{text:"Mobile App",link:"https://app.theengs.io",target:"_self",rel:""},{text:"OpenMQTTGateway",link:"https://docs.openmqttgateway.com",target:"_self",rel:""},{text:"Gateway",link:"https://gateway.theengs.io",target:"_self",rel:""}]},{text:"Core",items:[{text:"Decoder",link:"https://decoder.theengs.io",target:"_self",rel:""},{text:"Web Parser",link:"https://parser.theengs.io",target:"_self",rel:""}]}]},{text:"Compatible devices",link:"https://decoder.theengs.io/devices/devices.html",target:"_self",rel:""},{text:"Community",link:"https://community.openmqttgateway.com",target:"_self",rel:""},{text:"Shop",link:"https://shop.theengs.io/",target:"_self",rel:""},{text:"Sponsor 🤍",link:"https://github.com/sponsors/theengs",target:"_self",rel:""}],sidebar:[["/","0 - What is it for 🏠"],{title:"1 - Prerequisites🧭",sidebarDepth:1,children:["prerequisites/devices","prerequisites/board","prerequisites/parts","prerequisites/broker","prerequisites/controller"]},{title:"2 - Set it up 🔨",sidebarDepth:1,children:["setitup/rf","setitup/ble","setitup/ir","setitup/lora","setitup/gsm","setitup/serial","setitup/sensors","setitup/actuators"]},{title:"3 - Upload ➡️",sidebarDepth:1,children:["upload/web-install","upload/binaries","upload/builds","upload/gitpod","upload/portal","upload/advanced-configuration","upload/troubleshoot"]},{title:"4 - Use ✈️",sidebarDepth:1,children:["use/rf","use/ble","use/ir","use/lora","use/gsm","use/serial","use/rfm69","use/sensors","use/actuators","use/boards","use/displays","use/gateway","use/webui"]},{title:"5 - Integrate 🎉",sidebarDepth:1,children:["integrate/openhab2","integrate/openhab3","integrate/home_assistant","integrate/node_red","integrate/aws_iot","integrate/jeedom"]},{title:"6 - Participate 💻",sidebarDepth:1,children:["participate/support","participate/development","participate/adding-protocols","participate/community",["https://github.com/1technophile/OpenMQTTGateway/blob/development/LICENSE.txt","License"]]}]}};n(235);Qn.component("web-uploader",()=>n.e(47).then(n.bind(null,423))),Qn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,419))),Qn.component("Badge",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,424))),Qn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,420)));n(236),n(237);function Rs(t){const e=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-e.left,y:n.top-e.top}}var Us=[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({Vue:t,router:e})=>{e.options.scrollBehavior=(e,n,r)=>{if(r)return window.scrollTo({top:r.y,behavior:"smooth"});if(e.hash){if(t.$vuepress.$get("disableScrollBehavior"))return!1;const n=document.querySelector(e.hash);return!!n&&window.scrollTo({top:Rs(n).y,behavior:"smooth"})}return window.scrollTo({top:0,behavior:"smooth"})}}],Is=[];class Bs extends class{constructor(){this.store=new Qn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Qn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Bs.prototype,{getPageAsyncComponent:ss,getLayoutAsyncComponent:ls,getAsyncComponent:cs,getVueComponent:us});var Ds={install(t){const e=new Bs;t.$vuepress=e,t.prototype.$vuepress=e}};function Fs(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var qs={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return ps("pageKey",e),Qn.component(e)||Qn.component(e,ss(e)),Qn.component(e)?t(e):t("")}},Ns={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Hs={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},zs=(n(238),n(239),Object($s.a)(Hs,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Vs={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Qn.config.productionTip=!1,Qn.use(Va),Qn.use(Ds),Qn.mixin(function(t,e,n=Qn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Qn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Fs(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Fs(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Fs(t,o)?r(o):Fs(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Us.filter(t=>"function"==typeof t).map(e=>e({Vue:Qn,options:r,router:n,siteData:Ls,isServer:t})))}catch(t){console.error(t)}return{app:new Qn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Is.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file +var r=Object.freeze({}),o=Array.isArray;function i(t){return null==t}function a(t){return null!=t}function s(t){return!0===t}function l(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function c(t){return"function"==typeof t}function u(t){return null!==t&&"object"==typeof t}var f=Object.prototype.toString;function p(t){return"[object Object]"===f.call(t)}function d(t){return"[object RegExp]"===f.call(t)}function h(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,g,2):String(t)}function g(t,e){return e&&e.__v_isRef?e.value:e}function y(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var x=Object.prototype.hasOwnProperty;function S(t,e){return x.call(t,e)}function k(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var O=/-(\w)/g,P=k((function(t){return t.replace(O,(function(t,e){return e?e.toUpperCase():""}))})),T=k((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),C=/\B([A-Z])/g,E=k((function(t){return t.replace(C,"-$1").toLowerCase()}));var j=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function $(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function A(t,e){for(var n in e)t[n]=e[n];return t}function M(t){for(var e={},n=0;n0,Z=K&&K.indexOf("edge/")>0;K&&K.indexOf("android");var tt=K&&/iphone|ipad|ipod|ios/.test(K);K&&/chrome\/\d+/.test(K),K&&/phantomjs/.test(K);var et,nt=K&&K.match(/firefox\/(\d+)/),rt={}.watch,ot=!1;if(X)try{var it={};Object.defineProperty(it,"passive",{get:function(){ot=!0}}),window.addEventListener("test-passive",null,it)}catch(t){}var at=function(){return void 0===et&&(et=!X&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),et},st=X&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function lt(t){return"function"==typeof t&&/native code/.test(t.toString())}var ct,ut="undefined"!=typeof Symbol&<(Symbol)&&"undefined"!=typeof Reflect&<(Reflect.ownKeys);ct="undefined"!=typeof Set&<(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ft=null;function pt(t){void 0===t&&(t=null),t||ft&&ft._scope.off(),ft=t,t&&t._scope.on()}var dt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),ht=function(t){void 0===t&&(t="");var e=new dt;return e.text=t,e.isComment=!0,e};function vt(t){return new dt(void 0,void 0,void 0,String(t))}function mt(t){var e=new dt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}"function"==typeof SuppressedError&&SuppressedError;var gt=0,yt=[],bt=function(){function t(){this._pending=!1,this.id=gt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,yt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.filter((function(t){return t}));for(var n=0,r=e.length;n0&&(Kt((c=t(c,"".concat(n||"","_").concat(r)))[0])&&Kt(f)&&(p[u]=vt(f.text+c[0].text),c.shift()),p.push.apply(p,c)):l(c)?Kt(f)?p[u]=vt(f.text+c):""!==c&&p.push(vt(c)):Kt(c)&&Kt(f)?p[u]=vt(f.text+c.text):(s(e._isVList)&&a(c.tag)&&i(c.key)&&a(n)&&(c.key="__vlist".concat(n,"_").concat(r,"__")),p.push(c)));return p}(t):void 0}function Kt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Yt(t,e){var n,r,i,s,l=null;if(o(t)||"string"==typeof t)for(l=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,l=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&l===o.$key&&!a&&!o.$hasNormal)return o;for(var c in i={},e)e[c]&&"$"!==c[0]&&(i[c]=me(t,n,c,e[c]))}else i={};for(var u in n)u in i||(i[u]=ge(n,u));return e&&Object.isExtensible(e)&&(e._normalized=i),W(i,"$stable",s),W(i,"$key",l),W(i,"$hasNormal",a),i}function me(t,e,n,r){var i=function(){var e=ft;pt(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Xt(n))&&n[0];return pt(e),n&&(!i||1===n.length&&i.isComment&&!he(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function ge(t,e){return function(){return t[e]}}function ye(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};W(e,"_v_attr_proxy",!0),be(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||be(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||_e(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:j(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Ft(t,e,n)}))}}}function be(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,we(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function we(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function _e(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var xe=null;function Se(t,e){return(t.__esModule||ut&&"Module"===t[Symbol.toStringTag])&&(t=t.default),u(t)?e.extend(t):t}function ke(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(cn=function(){return un.now()})}var fn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function pn(){var t,e;for(ln=cn(),an=!0,en.sort(fn),sn=0;snsn&&en[n].id>t.id;)n--;en.splice(n+1,0,t)}else en.push(t);on||(on=!0,De(pn))}}function hn(t,e){if(t){for(var n=Object.create(null),r=ut?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!S(o,"default"))a=!1;else if(""===a||a===E(t)){var l=Un(String,o.type);(l<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function Yn(t,e){var n=t.cache,r=t.keys,o=t._vnode,i=t.$vnode;for(var a in n){var s=n[a];if(s){var l=s.name;l&&!e(l)&&Jn(n,a,r,o)}}i.componentOptions.children=void 0}function Jn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,_(n,e)}Qn.prototype._init=function(t){var e=this;e._uid=Vn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Nt(!0),e._scope.parent=void 0,e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=jn(Wn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Xe(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=pe(e._renderChildren,o),t.$scopedSlots=n?ve(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return Oe(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Oe(t,e,n,r,o,!0)};var i=n&&n.data;At(t,"$attrs",i&&i.attrs||r,null,!0),At(t,"$listeners",e._parentListeners||r,null,!0)}(e),tn(e,"beforeCreate",void 0,!1),function(t){var e=hn(t.$options.inject,t);e&&(Ct(!1),Object.keys(e).forEach((function(n){At(t,n,e[n])})),Ct(!0))}(e),Dn(e),function(t){var e=t.$options.provide;if(e){var n=c(e)?e.call(t):e;if(!u(n))return;for(var r=Ht(t),o=ut?Reflect.ownKeys(n):Object.keys(n),i=0;i1?$(n):n;for(var r=$(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Jn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Jn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Yn(t,(function(t){return Kn(e,t)}))})),this.$watch("exclude",(function(e){Yn(t,(function(t){return!Kn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=ke(t),n=e&&e.componentOptions;if(n){var r=Xn(n),o=this.include,i=this.exclude;if(o&&(!r||!Kn(o,r))||i&&r&&Kn(i,r))return e;var a=this.cache,s=this.keys,l=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[l]?(e.componentInstance=a[l].componentInstance,_(s,l),s.push(l)):(this.vnodeToCache=e,this.keyToCache=l),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return H}};Object.defineProperty(t,"config",e),t.util={warn:Sn,extend:A,mergeOptions:jn,defineReactive:At},t.set=Mt,t.delete=Lt,t.nextTick=De,t.observable=function(t){return $t(t),t},t.options=Object.create(null),q.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,A(t.options.components,tr),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=$(arguments,1);return n.unshift(this),c(t.install)?t.install.apply(t,n):c(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=jn(this.options,t),this}}(t),Gn(t),function(t){q.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&c(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Qn),Object.defineProperty(Qn.prototype,"$isServer",{get:at}),Object.defineProperty(Qn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Qn,"FunctionalRenderContext",{value:vn}),Qn.version="2.7.16";var er=b("style,class"),nr=b("input,textarea,option,select,progress"),rr=b("contenteditable,draggable,spellcheck"),or=b("events,caret,typing,plaintext-only"),ir=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ar="http://www.w3.org/1999/xlink",sr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},lr=function(t){return sr(t)?t.slice(6,t.length):""},cr=function(t){return null==t||!1===t};function ur(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=fr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=fr(e,n.data));return function(t,e){if(a(t)||a(e))return pr(t,dr(e));return""}(e.staticClass,e.class)}function fr(t,e){return{staticClass:pr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function pr(t,e){return t?e?t+" "+e:t:e||""}function dr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Ir(t,e,n):ir(e)?cr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):rr(e)?t.setAttribute(e,function(t,e){return cr(e)||"false"===e?"false":"contenteditable"===t&&or(e)?e:"true"}(e,n)):sr(e)?cr(n)?t.removeAttributeNS(ar,lr(e)):t.setAttributeNS(ar,e,n):Ir(t,e,n)}function Ir(t,e,n){if(cr(n))t.removeAttribute(e);else{if(Y&&!J&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Br={create:Rr,update:Rr};function Dr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=ur(e),l=n._transitionClasses;a(l)&&(s=pr(s,dr(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Fr,qr={create:Dr,update:Dr};function Nr(t,e,n){var r=Fr;return function o(){var i=e.apply(null,arguments);null!==i&&Vr(t,o,n,r)}}var Hr=$e&&!(nt&&Number(nt[1])<=53);function zr(t,e,n,r){if(Hr){var o=ln,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Fr.addEventListener(t,e,ot?{capture:n,passive:r}:n)}function Vr(t,e,n,r){(r||Fr).removeEventListener(t,e._wrapper||e,n)}function Wr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Fr=e.elm||t.elm,function(t){if(a(t.__r)){var e=Y?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Wt(n,r,zr,Vr,Nr,e.context),Fr=void 0}}var Qr,Gr={create:Wr,update:Wr,destroy:function(t){return Wr(t,kr)}};function Xr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,l=t.data.domProps||{},c=e.data.domProps||{};for(n in(a(c.__ob__)||s(c._v_attr_proxy))&&(c=e.data.domProps=A({},c)),l)n in c||(o[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===l[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var u=i(r)?"":String(r);Kr(o,u)&&(o.value=u)}else if("innerHTML"===n&&mr(o.tagName)&&i(o.innerHTML)){(Qr=Qr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=Qr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==l[n])try{o[n]=r}catch(t){}}}}function Kr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return y(n)!==y(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Yr={create:Xr,update:Xr},Jr=k((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Zr(t){var e=to(t.style);return t.staticStyle?A(t.staticStyle,e):e}function to(t){return Array.isArray(t)?M(t):"string"==typeof t?Jr(t):t}var eo,no=/^--/,ro=/\s*!important$/,oo=function(t,e,n){if(no.test(e))t.style.setProperty(e,n);else if(ro.test(n))t.style.setProperty(E(e),n.replace(ro,""),"important");else{var r=ao(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(co).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function fo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(co).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function po(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&A(e,ho(t.name||"v")),A(e,t),e}return"string"==typeof t?ho(t):void 0}}var ho=k((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),vo=X&&!J,mo="transition",go="transitionend",yo="animation",bo="animationend";vo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(mo="WebkitTransition",go="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(yo="WebkitAnimation",bo="webkitAnimationEnd"));var wo=X?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function _o(t){wo((function(){wo(t)}))}function xo(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),uo(t,e))}function So(t,e){t._transitionClasses&&_(t._transitionClasses,e),fo(t,e)}function ko(t,e,n){var r=Po(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?go:bo,l=0,c=function(){t.removeEventListener(s,u),n()},u=function(e){e.target===t&&++l>=a&&c()};setTimeout((function(){l0&&(n="transition",u=a,f=i.length):"animation"===e?c>0&&(n="animation",u=c,f=l.length):f=(n=(u=Math.max(a,c))>0?a>c?"transition":"animation":null)?"transition"===n?i.length:l.length:0,{type:n,timeout:u,propCount:f,hasTransform:"transition"===n&&Oo.test(r[mo+"Property"])}}function To(t,e){for(;t.length1}function Mo(t,e){!0!==e.data.show&&Eo(e)}var Lo=function(t){var e,n,r={},c=t.modules,u=t.nodeOps;for(e=0;eh?w(t,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&x(e,f,h)}(f,v,g,n,c):a(g)?(a(t.text)&&u.setTextContent(f,""),w(f,null,g,0,g.length-1,n)):a(v)?x(v,0,v.length-1):a(t.text)&&u.setTextContent(f,""):t.text!==e.text&&u.setTextContent(f,e.text),a(h)&&a(d=h.hook)&&a(d=d.postpatch)&&d(t,e)}}}function P(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(I(Do(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Bo(t,e){return e.every((function(e){return!I(e,t)}))}function Do(t){return"_value"in t?t._value:t.value}function Fo(t){t.target.composing=!0}function qo(t){t.target.composing&&(t.target.composing=!1,No(t.target,"input"))}function No(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Ho(t){return!t.componentInstance||t.data&&t.data.transition?t:Ho(t.componentInstance._vnode)}var zo={model:Ro,show:{bind:function(t,e,n){var r=e.value,o=(n=Ho(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,Eo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=Ho(n)).data&&n.data.transition?(n.data.show=!0,r?Eo(n,(function(){t.style.display=t.__vOriginalDisplay})):jo(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},Vo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Wo(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Wo(ke(e.children)):t}function Qo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[P(r)]=o[r];return e}function Go(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Xo=function(t){return t.tag||he(t)},Ko=function(t){return"show"===t.name},Yo={name:"transition",props:Vo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Xo)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Wo(o);if(!i)return o;if(this._leaving)return Go(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:l(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Qo(this),c=this._vnode,u=Wo(c);if(i.data.directives&&i.data.directives.some(Ko)&&(i.data.show=!0),u&&u.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,u)&&!he(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var f=u.data.transition=A({},s);if("out-in"===r)return this._leaving=!0,Qt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Go(t,o);if("in-out"===r){if(he(i))return c;var p,d=function(){p()};Qt(s,"afterEnter",d),Qt(s,"enterCancelled",d),Qt(f,"delayLeave",(function(t){p=t}))}}return o}}},Jo=A({tag:String,moveClass:String},Vo);function Zo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function ti(t){t.data.newPos=t.elm.getBoundingClientRect()}function ei(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Jo.mode;var ni={Transition:Yo,TransitionGroup:{props:Jo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Ye(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Qo(this),s=0;s-1?yr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:yr[t]=/HTMLUnknownElement/.test(e.toString())},A(Qn.options.directives,zo),A(Qn.options.components,ni),Qn.prototype.__patch__=X?Lo:L,Qn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=ht),tn(t,"beforeMount"),r=function(){t._update(t._render(),n)},new Ve(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&tn(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),c=e&&e.path||"/",u=l.path?Si(l.path,c,n||o.append):c,f=function(t,e,n){void 0===e&&(e={});var r,o=n||ui;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(ci):ci(a)}return r}(l.query,o.query,r&&r.options.parseQuery),p=o.hash||l.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:u,query:f,hash:p}}var zi,Vi=function(){},Wi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,l={},c=n.options.linkActiveClass,u=n.options.linkExactActiveClass,f=null==c?"router-link-active":c,p=null==u?"router-link-exact-active":u,d=null==this.activeClass?f:this.activeClass,h=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?di(null,Hi(a.redirectedFrom),null,n):a;l[h]=yi(r,v,this.exactPath),l[d]=this.exact||this.exactPath?l[h]:function(t,e){return 0===t.path.replace(pi,"/").indexOf(e.path.replace(pi,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=l[h]?this.ariaCurrentValue:null,g=function(t){Qi(t)&&(e.replace?n.replace(i,Vi):n.push(i,Vi))},y={click:Qi};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:l},w=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:l[d],isExactActive:l[h]});if(w){if(1===w.length)return w[0];if(w.length>1||!w.length)return 0===w.length?t():t("span",{},w)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var _=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Ni(u.path,s.params),l(u,s,a)}if(s.path){s.params={};for(var d=0;d-1}function ka(t,e){return Sa(t)&&t._isRouter&&(null==e||t.type===e)}function Oa(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Pa(t){return function(e,n,r){var o=!1,i=0,a=null;Ta(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var l,c=ja((function(e){var o;((o=e).__esModule||Ea&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:zi.extend(e),n.components[s]=e,--i<=0&&r()})),u=ja((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Sa(t)?t:new Error(e),r(a))}));try{l=t(c,u)}catch(t){u(t)}if(l)if("function"==typeof l.then)l.then(c,u);else{var f=l.component;f&&"function"==typeof f.then&&f.then(c,u)}}})),o||r()}}function Ta(t,e){return Ca(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Ca(t){return Array.prototype.concat.apply([],t)}var Ea="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function ja(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var $a=function(t,e){this.router=t,this.base=function(t){if(!t)if(Gi){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=vi,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Aa(t,e,n,r){var o=Ta(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=zi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Ca(r?o.reverse():o)}function Ma(t,e){if(e)return function(){return t.apply(e,arguments)}}$a.prototype.listen=function(t){this.cb=t},$a.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},$a.prototype.onError=function(t){this.errorCbs.push(t)},$a.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(ka(t,ya.redirected)&&i===vi||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},$a.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!ka(t)&&Sa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},l=t.matched.length-1,c=o.matched.length-1;if(yi(t,o)&&l===c&&t.matched[l]===o.matched[c])return this.ensureURL(),t.hash&&aa(this.router,o,t,!1),s(((a=_a(i=o,t,ya.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var u=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=va&&n;r&&this.listeners.push(ia());var o=function(){var n=t.current,o=Ra(t.base);t.current===vi&&o===t._startLocation||t.transitionTo(o,(function(t){r&&aa(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ma(ki(r.base+t.fullPath)),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ga(ki(r.base+t.fullPath)),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ra(this.base)!==this.current.fullPath){var e=ki(this.base+this.current.fullPath);t?ma(e):ga(e)}},e.prototype.getCurrentLocation=function(){return Ra(this.base)},e}($a);function Ra(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(ki(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ua=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ra(t);if(!/^\/#/.test(e))return window.location.replace(ki(t+"/#"+e)),!0}(this.base)||Ia()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=va&&e;n&&this.listeners.push(ia());var r=function(){var e=t.current;Ia()&&t.transitionTo(Ba(),(function(r){n&&aa(t.router,r,e,!0),va||qa(r.fullPath)}))},o=va?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Fa(t.fullPath),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){qa(t.fullPath),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ba()!==e&&(t?Fa(e):qa(e))},e.prototype.getCurrentLocation=function(){return Ba()},e}($a);function Ia(){var t=Ba();return"/"===t.charAt(0)||(qa("/"+t),!1)}function Ba(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Da(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Fa(t){va?ma(Da(t)):window.location.hash=t}function qa(t){va?ga(Da(t)):window.location.replace(Da(t))}var Na=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){ka(t,ya.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}($a),Ha=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Yi(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!va&&!1!==t.fallback,this.fallback&&(e="hash"),Gi||(e="abstract"),this.mode=e,e){case"history":this.history=new La(this,t.base);break;case"hash":this.history=new Ua(this,t.base,this.fallback);break;case"abstract":this.history=new Na(this,t.base);break;default:0}},za={currentRoute:{configurable:!0}};Ha.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},za.currentRoute.get=function(){return this.history&&this.history.current},Ha.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof La||n instanceof Ua){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;va&&o&&"fullPath"in t&&aa(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Ha.prototype.beforeEach=function(t){return Wa(this.beforeHooks,t)},Ha.prototype.beforeResolve=function(t){return Wa(this.resolveHooks,t)},Ha.prototype.afterEach=function(t){return Wa(this.afterHooks,t)},Ha.prototype.onReady=function(t,e){this.history.onReady(t,e)},Ha.prototype.onError=function(t){this.history.onError(t)},Ha.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Ha.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Ha.prototype.go=function(t){this.history.go(t)},Ha.prototype.back=function(){this.go(-1)},Ha.prototype.forward=function(){this.go(1)},Ha.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Ha.prototype.resolve=function(t,e,n){var r=Hi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?ki(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Ha.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ha.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==vi&&this.history.transitionTo(this.history.getCurrentLocation())},Ha.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==vi&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ha.prototype,za);var Va=Ha;function Wa(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Ha.install=function t(e){if(!t.installed||zi!==e){t.installed=!0,zi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",_i),e.component("RouterLink",Wi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ha.version="3.6.5",Ha.isNavigationFailure=ka,Ha.NavigationFailureType=ya,Ha.START_LOCATION=vi,Gi&&window.Vue&&window.Vue.use(Ha);n(97);n(90),n(127);var Qa={"components/AlgoliaSearchBox":()=>Promise.all([n.e(0),n.e(19)]).then(n.bind(null,418)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(20)]).then(n.bind(null,256)),"components/DropdownTransition":()=>Promise.all([n.e(0),n.e(31)]).then(n.bind(null,244)),"components/Home":()=>Promise.all([n.e(0),n.e(22)]).then(n.bind(null,285)),"components/NavLink":()=>n.e(41).then(n.bind(null,243)),"components/NavLinks":()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,268)),"components/Navbar":()=>Promise.all([n.e(0),n.e(1)]).then(n.bind(null,415)),"components/Page":()=>Promise.all([n.e(0),n.e(14)]).then(n.bind(null,286)),"components/PageEdit":()=>Promise.all([n.e(0),n.e(23)]).then(n.bind(null,270)),"components/PageNav":()=>Promise.all([n.e(0),n.e(21)]).then(n.bind(null,271)),"components/Sidebar":()=>Promise.all([n.e(0),n.e(11)]).then(n.bind(null,287)),"components/SidebarButton":()=>Promise.all([n.e(0),n.e(32)]).then(n.bind(null,288)),"components/SidebarGroup":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,269)),"components/SidebarLink":()=>Promise.all([n.e(0),n.e(25)]).then(n.bind(null,257)),"components/SidebarLinks":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,255)),"global-components/Badge":()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,424)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,419)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,420)),"layouts/404":()=>n.e(7).then(n.bind(null,421)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,422)),NotFound:()=>n.e(7).then(n.bind(null,421)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,422))},Ga={"v-96f26938":()=>n.e(48).then(n.bind(null,425)),"v-06f4d0aa":()=>n.e(16).then(n.bind(null,426)),"v-347fe277":()=>n.e(12).then(n.bind(null,427)),"v-b936cd92":()=>n.e(10).then(n.bind(null,428)),"v-095f6301":()=>n.e(42).then(n.bind(null,429)),"v-e115e73a":()=>n.e(49).then(n.bind(null,430)),"v-08357a02":()=>n.e(13).then(n.bind(null,431)),"v-73cb197f":()=>n.e(17).then(n.bind(null,432)),"v-2db1db37":()=>n.e(50).then(n.bind(null,433)),"v-117d8812":()=>n.e(51).then(n.bind(null,434)),"v-412f01af":()=>n.e(26).then(n.bind(null,435)),"v-f3fbff12":()=>n.e(52).then(n.bind(null,436)),"v-01bee537":()=>n.e(53).then(n.bind(null,437)),"v-56e06d4d":()=>n.e(54).then(n.bind(null,438)),"v-5e0eec87":()=>n.e(43).then(n.bind(null,439)),"v-204c7852":()=>n.e(24).then(n.bind(null,440)),"v-29f81312":()=>n.e(55).then(n.bind(null,441)),"v-0c47cd52":()=>n.e(56).then(n.bind(null,442)),"v-cf2ed192":()=>n.e(33).then(n.bind(null,443)),"v-b5aec012":()=>n.e(44).then(n.bind(null,444)),"v-eab731fa":()=>n.e(34).then(n.bind(null,445)),"v-0d1e8e9e":()=>n.e(57).then(n.bind(null,446)),"v-2fe62c26":()=>n.e(35).then(n.bind(null,447)),"v-aa1cc612":()=>n.e(58).then(n.bind(null,448)),"v-255607ed":()=>n.e(36).then(n.bind(null,449)),"v-7df515d2":()=>n.e(37).then(n.bind(null,450)),"v-6e14dcd7":()=>n.e(27).then(n.bind(null,451)),"v-303bd052":()=>n.e(59).then(n.bind(null,452)),"v-2c32e617":()=>n.e(38).then(n.bind(null,453)),"v-246d3f77":()=>n.e(60).then(n.bind(null,454)),"v-27c660f7":()=>n.e(28).then(n.bind(null,455)),"v-2b7b8f3b":()=>n.e(61).then(n.bind(null,456)),"v-0d819412":()=>n.e(62).then(n.bind(null,457)),"v-3043a2b9":()=>n.e(39).then(n.bind(null,458)),"v-bbb970d2":()=>n.e(18).then(n.bind(null,459)),"v-288d7b9e":()=>n.e(63).then(n.bind(null,460)),"v-20c05837":()=>n.e(45).then(n.bind(null,461)),"v-131b9357":()=>n.e(40).then(n.bind(null,462)),"v-a9ffe0fe":()=>n.e(46).then(n.bind(null,463)),"v-947f362a":()=>n.e(30).then(n.bind(null,464)),"v-749f316f":()=>n.e(29).then(n.bind(null,465)),"v-21b208b7":()=>n.e(64).then(n.bind(null,466)),"v-93d2a72a":()=>n.e(66).then(n.bind(null,467)),"v-2566e137":()=>n.e(67).then(n.bind(null,468)),"v-2494b4d7":()=>n.e(65).then(n.bind(null,469))};function Xa(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Ka=/-(\w)/g,Ya=Xa(t=>t.replace(Ka,(t,e)=>e?e.toUpperCase():"")),Ja=/\B([A-Z])/g,Za=Xa(t=>t.replace(Ja,"-$1").toLowerCase()),ts=Xa(t=>t.charAt(0).toUpperCase()+t.slice(1));function es(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(ts(Ya(e))):t(ts(e))||t(Za(e))}const ns=Object.assign({},Qa,Ga),rs=t=>ns[t],os=t=>Ga[t],is=t=>Qa[t],as=t=>Qn.component(t);function ss(t){return es(os,t)}function ls(t){return es(is,t)}function cs(t){return es(rs,t)}function us(t){return es(as,t)}function fs(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!us(t)&&cs(t)){const e=await cs(t)();Qn.component(t,e.default)}}))}function ps(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var ds=n(86),hs=n.n(ds),vs=n(87),ms=n.n(vs),gs={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${ms()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=bs(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=ws(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return hs()([{name:"description",content:this.$description}],t,this.siteMeta,_s)},updateCanonicalLink(){ys(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",bs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){ws(null,this.currentMetaTags),ys()}};function ys(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function bs(t=""){return t?``:""}function ws(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function _s(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var xs=n(88),Ss={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(xs)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},ks=n(22),Os=n.n(ks),Ps={mounted(){Os.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Qn.component(t.name)||Os.a.start(),n()}),this.$router.afterEach(()=>{Os.a.done(),this.isSidebarOpen=!1})}},Ts=n(89),Cs=n.n(Ts),Es=[gs,Ss,Ps,{mounted(){Cs.a.polyfill()}}],js={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return ps("layout",t),Qn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},$s=n(14),As=Object($s.a)(js,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(As,"mixins",Es);const Ms=[{name:"v-96f26938",path:"/",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-96f26938").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-06f4d0aa",path:"/integrate/home_assistant.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-06f4d0aa").then(n)}},{name:"v-347fe277",path:"/integrate/aws_iot.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-347fe277").then(n)}},{name:"v-b936cd92",path:"/integrate/jeedom.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-b936cd92").then(n)}},{name:"v-095f6301",path:"/integrate/openhab2.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-095f6301").then(n)}},{name:"v-e115e73a",path:"/participate/adding-protocols.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-e115e73a").then(n)}},{name:"v-08357a02",path:"/integrate/openhab3.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-08357a02").then(n)}},{name:"v-73cb197f",path:"/integrate/node_red.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-73cb197f").then(n)}},{name:"v-2db1db37",path:"/participate/community.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2db1db37").then(n)}},{name:"v-117d8812",path:"/participate/development.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-117d8812").then(n)}},{name:"v-412f01af",path:"/prerequisites/M5.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-412f01af").then(n)}},{name:"v-f3fbff12",path:"/participate/support.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-f3fbff12").then(n)}},{name:"v-01bee537",path:"/prerequisites/board.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-01bee537").then(n)}},{name:"v-56e06d4d",path:"/prerequisites/broker.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-56e06d4d").then(n)}},{name:"v-5e0eec87",path:"/prerequisites/controller.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-5e0eec87").then(n)}},{name:"v-204c7852",path:"/prerequisites/devices.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-204c7852").then(n)}},{name:"v-29f81312",path:"/prerequisites/parts.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-29f81312").then(n)}},{name:"v-0c47cd52",path:"/setitup/actuators.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-0c47cd52").then(n)}},{name:"v-cf2ed192",path:"/setitup/ble.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-cf2ed192").then(n)}},{name:"v-b5aec012",path:"/setitup/gsm.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-b5aec012").then(n)}},{name:"v-eab731fa",path:"/setitup/ir.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-eab731fa").then(n)}},{name:"v-0d1e8e9e",path:"/setitup/lora.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-0d1e8e9e").then(n)}},{name:"v-2fe62c26",path:"/setitup/rf.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2fe62c26").then(n)}},{name:"v-aa1cc612",path:"/setitup/sensors.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-aa1cc612").then(n)}},{name:"v-255607ed",path:"/setitup/serial.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-255607ed").then(n)}},{name:"v-7df515d2",path:"/upload/advanced-configuration.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-7df515d2").then(n)}},{name:"v-6e14dcd7",path:"/upload/binaries.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-6e14dcd7").then(n)}},{name:"v-303bd052",path:"/upload/builds.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-303bd052").then(n)}},{name:"v-2c32e617",path:"/upload/gitpod.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2c32e617").then(n)}},{name:"v-246d3f77",path:"/upload/troubleshoot.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-246d3f77").then(n)}},{name:"v-27c660f7",path:"/upload/portal.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-27c660f7").then(n)}},{name:"v-2b7b8f3b",path:"/upload/web-install.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2b7b8f3b").then(n)}},{name:"v-0d819412",path:"/use/actuators.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-0d819412").then(n)}},{name:"v-3043a2b9",path:"/use/boards.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-3043a2b9").then(n)}},{name:"v-bbb970d2",path:"/use/ble.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-bbb970d2").then(n)}},{name:"v-288d7b9e",path:"/use/displays.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-288d7b9e").then(n)}},{name:"v-20c05837",path:"/use/gateway.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-20c05837").then(n)}},{name:"v-131b9357",path:"/use/gsm.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-131b9357").then(n)}},{name:"v-a9ffe0fe",path:"/use/ir.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-a9ffe0fe").then(n)}},{name:"v-947f362a",path:"/use/rf.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-947f362a").then(n)}},{name:"v-749f316f",path:"/use/lora.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-749f316f").then(n)}},{name:"v-21b208b7",path:"/use/rfm69.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-21b208b7").then(n)}},{name:"v-93d2a72a",path:"/use/serial.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-93d2a72a").then(n)}},{name:"v-2566e137",path:"/use/webui.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2566e137").then(n)}},{name:"v-2494b4d7",path:"/use/sensors.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2494b4d7").then(n)}},{path:"*",component:As}],Ls={title:"Theengs OpenMQTTGateway DEVELOPMENT SHA:e91086 TEST ONLY",description:"One gateway, many technologies: MQTT gateway for ESP8266 or ESP32 with bidirectional 433mhz/315mhz/868mhz, Infrared communications, BLE, LoRa, beacons detection, mi flora / mi jia / LYWSD02/ Mi Scale compatibility, SMS & LORA.",base:"/dev/",headTags:[["meta",{name:"viewport",content:"width=device-width, initial-scale=1"}],["link",{rel:"apple-touch-icon",sizes:"180x180",href:".apple-touch-icon.png"}],["link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/dev/favicon-32x32.png"}],["link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/dev/favicon-16x16.png"}],["link",{rel:"manifest",href:"/dev/manifest.json"}],["meta",{name:"theme-color",content:"#3eaf7c"}],["meta",{name:"apple-mobile-web-app-capable",content:"yes"}],["meta",{name:"apple-mobile-web-app-status-bar-style",content:"black"}],["link",{rel:"mask-icon",href:"/dev/icons/safari-pinned-tab.svg",color:"#3eaf7c"}],["meta",{name:"msapplication-TileImage",content:"/favicon-144x144.png"}],["meta",{name:"msapplication-TileColor",content:"#000000"}],["script",{type:"module",src:"https://unpkg.com/esp-web-tools@9.4.3/dist/web/install-button.js?module"}]],pages:[{frontmatter:{},regularPath:"/",relativePath:"README.md",key:"v-96f26938",path:"/",headers:[{level:2,title:"Using OpenMQTTGateway ?",slug:"using-openmqttgateway"},{level:2,title:"Products powered by OpenMQTTGateway",slug:"products-powered-by-openmqttgateway"},{level:3,title:"Theengs Bridge, BLE gateway with external antenna",slug:"theengs-bridge-ble-gateway-with-external-antenna"},{level:3,title:"Theengs Plug, BLE gateway and Smart Plug",slug:"theengs-plug-ble-gateway-and-smart-plug"},{level:2,title:"Media",slug:"media"},{level:3,title:"Theengs Plug",slug:"theengs-plug"},{level:3,title:"433Mhz and BLE",slug:"_433mhz-and-ble"},{level:3,title:"BLE",slug:"ble"},{level:3,title:"433Mhz",slug:"_433mhz"},{level:3,title:"LORA",slug:"lora"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate Home Assistant",frontmatter:{},regularPath:"/integrate/home_assistant.html",relativePath:"integrate/home_assistant.md",key:"v-06f4d0aa",path:"/integrate/home_assistant.html",headers:[{level:2,title:"Automatic integration with Auto discovery",slug:"automatic-integration-with-auto-discovery"},{level:3,title:"RTL_433 auto discovery specificity",slug:"rtl-433-auto-discovery-specificity"},{level:3,title:"RF (RCSwitch based gateway) Auto discovery specificity",slug:"rf-rcswitch-based-gateway-auto-discovery-specificity"},{level:2,title:"Manual integration",slug:"manual-integration"},{level:3,title:"Pir Sensor",slug:"pir-sensor"},{level:3,title:"Door sensor",slug:"door-sensor"},{level:3,title:"Motion sensor",slug:"motion-sensor"},{level:3,title:"Switches",slug:"switches"},{level:3,title:"RF gateway mode - Pilight, RF, kaku",slug:"rf-gateway-mode-pilight-rf-kaku"},{level:3,title:"Mijia Thermometer BLE",slug:"mijia-thermometer-ble"},{level:3,title:"Xiaomi Mi Scale V2 BLE (XMTZC05HM)",slug:"xiaomi-mi-scale-v2-ble-xmtzc05hm"},{level:3,title:"MQTT Room Presence",slug:"mqtt-room-presence"},{level:3,title:"Temperature sensor",slug:"temperature-sensor"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate AWS IOT",frontmatter:{},regularPath:"/integrate/aws_iot.html",relativePath:"integrate/aws_iot.md",key:"v-347fe277",path:"/integrate/aws_iot.html",headers:[{level:2,title:"Create a thing",slug:"create-a-thing"},{level:2,title:"Create a policy",slug:"create-a-policy"},{level:2,title:"Create a certificate",slug:"create-a-certificate"},{level:2,title:"Attach Policy with certificate",slug:"attach-policy-with-certificate"},{level:2,title:"Activate certificate and attach it to Thing",slug:"activate-certificate-and-attach-it-to-thing"},{level:2,title:"Find AWS EndPoint",slug:"find-aws-endpoint"},{level:2,title:"Gather the information for OpenMQTTGateway configuration",slug:"gather-the-information-for-openmqttgateway-configuration"},{level:2,title:"Modify OpenMQTTGateway configuration",slug:"modify-openmqttgateway-configuration"},{level:2,title:"Build and upload",slug:"build-and-upload"},{level:2,title:"Connect to a WiFi Access point see portal",slug:"connect-to-a-wifi-access-point-see-portal"},{level:2,title:"Verify that you receive data in AWS",slug:"verify-that-you-receive-data-in-aws"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate Jeedom",frontmatter:{},regularPath:"/integrate/jeedom.html",relativePath:"integrate/jeedom.md",key:"v-b936cd92",path:"/integrate/jeedom.html",headers:[{level:2,title:"Installation of jMQTT",slug:"installation-of-jmqtt"},{level:2,title:"Configuration the Broker in jMQTT",slug:"configuration-the-broker-in-jmqtt"},{level:2,title:"Creation of the OMG device",slug:"creation-of-the-omg-device"},{level:3,title:"Creation of the Last Will and Testament command",slug:"creation-of-the-last-will-and-testament-command"},{level:3,title:"Creation of an action command to restart the OMG device",slug:"creation-of-an-action-command-to-restart-the-omg-device"},{level:2,title:'Creation of the equipment for the "Xiaomi Mi Jia" sensor',slug:"creation-of-the-equipment-for-the-xiaomi-mi-jia-sensor"},{level:3,title:"Creation of an unknown/unidentified BT device",slug:"creation-of-an-unknown-unidentified-bt-device"},{level:3,title:"Creation of a known/identified BT device",slug:"creation-of-a-known-identified-bt-device"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate OPENHAB2",frontmatter:{},regularPath:"/integrate/openhab2.html",relativePath:"integrate/openhab2.md",key:"v-095f6301",path:"/integrate/openhab2.html",headers:[{level:2,title:"Auto discovery through home assistant convention",slug:"auto-discovery-through-home-assistant-convention"},{level:2,title:"MQTT 2 manual setup >=Openhab2.4",slug:"mqtt-2-manual-setup-openhab2-4"},{level:2,title:"For a mi flora or mi jia temperature :",slug:"for-a-mi-flora-or-mi-jia-temperature"},{level:2,title:'For a switch channel, add a channel by choosing the type "On/Off switch"',slug:"for-a-switch-channel-add-a-channel-by-choosing-the-type-on-off-switch"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Adding protocols",frontmatter:{},regularPath:"/participate/adding-protocols.html",relativePath:"participate/adding-protocols.md",key:"v-e115e73a",path:"/participate/adding-protocols.html",headers:[{level:2,title:"RF or IR",slug:"rf-or-ir"},{level:2,title:"BLE",slug:"ble"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate OPENHAB 3/4",frontmatter:{},regularPath:"/integrate/openhab3.html",relativePath:"integrate/openhab3.md",key:"v-08357a02",path:"/integrate/openhab3.html",headers:[{level:2,title:"Prerequisites",slug:"prerequisites"},{level:2,title:"IP address (if your broker is installed on the same server as OpenHAB)",slug:"ip-address-if-your-broker-is-installed-on-the-same-server-as-openhab"},{level:2,title:"Install the MQTT binding",slug:"install-the-mqtt-binding"},{level:2,title:"Install Jinja and JSONPath Transformations",slug:"install-jinja-and-jsonpath-transformations"},{level:2,title:"Upload OpenMQTTGateway to an ESP32",slug:"upload-openmqttgateway-to-an-esp32"},{level:2,title:"Configure OpenMQTTGateway from the web portal",slug:"configure-openmqttgateway-from-the-web-portal"},{level:2,title:"Adding the things",slug:"adding-the-things"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Integrate Node-Red",frontmatter:{},regularPath:"/integrate/node_red.html",relativePath:"integrate/node_red.md",key:"v-73cb197f",path:"/integrate/node_red.html",headers:[{level:2,title:"Integrate BLE sensors, devices and display a dashboard",slug:"integrate-ble-sensors-devices-and-display-a-dashboard"},{level:3,title:"Broker connection",slug:"broker-connection"},{level:3,title:"Json message processing",slug:"json-message-processing"},{level:3,title:"Dashboard",slug:"dashboard"},{level:2,title:"Integrate RF",slug:"integrate-rf"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Community participation",frontmatter:{},regularPath:"/participate/community.html",relativePath:"participate/community.md",key:"v-2db1db37",path:"/participate/community.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Development contributions",frontmatter:{},regularPath:"/participate/development.html",relativePath:"participate/development.md",key:"v-117d8812",path:"/participate/development.html",headers:[{level:2,title:"Nightly builds",slug:"nightly-builds"},{level:2,title:"Developer Certificate Of Origin",slug:"developer-certificate-of-origin"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"M5 Boards",frontmatter:{},regularPath:"/prerequisites/M5.html",relativePath:"prerequisites/M5.md",key:"v-412f01af",path:"/prerequisites/M5.html",headers:[{level:2,title:"M5StickC and M5Stack",slug:"m5stickc-and-m5stack"},{level:3,title:"3 low power modes",slug:"_3-low-power-modes"},{level:3,title:"Start screen",slug:"start-screen"},{level:3,title:"Sleep screen",slug:"sleep-screen"},{level:3,title:"Log display in case of warning",slug:"log-display-in-case-of-warning"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Supporting the project",frontmatter:{},regularPath:"/participate/support.html",relativePath:"participate/support.md",key:"v-f3fbff12",path:"/participate/support.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Boards",frontmatter:{},regularPath:"/prerequisites/board.html",relativePath:"prerequisites/board.md",key:"v-01bee537",path:"/prerequisites/board.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Broker",frontmatter:{},regularPath:"/prerequisites/broker.html",relativePath:"prerequisites/broker.md",key:"v-56e06d4d",path:"/prerequisites/broker.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Controller",frontmatter:{},regularPath:"/prerequisites/controller.html",relativePath:"prerequisites/controller.md",key:"v-5e0eec87",path:"/prerequisites/controller.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Devices",frontmatter:{},regularPath:"/prerequisites/devices.html",relativePath:"prerequisites/devices.md",key:"v-204c7852",path:"/prerequisites/devices.html",headers:[{level:2,title:"For radio frequency devices",slug:"for-radio-frequency-devices"},{level:2,title:"For BLE devices",slug:"for-ble-devices"},{level:2,title:"For infrared IR devices",slug:"for-infrared-ir-devices"},{level:2,title:"LORA",slug:"lora"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Parts",frontmatter:{},regularPath:"/prerequisites/parts.html",relativePath:"prerequisites/parts.md",key:"v-29f81312",path:"/prerequisites/parts.html",headers:[{level:2,title:"Main parts",slug:"main-parts"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Actuators",frontmatter:{},regularPath:"/setitup/actuators.html",relativePath:"setitup/actuators.md",key:"v-0c47cd52",path:"/setitup/actuators.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"},{level:2,title:"Pinout",slug:"pinout"},{level:2,title:"Somfy RTS",slug:"somfy-rts"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"BLE gateway",frontmatter:{},regularPath:"/setitup/ble.html",relativePath:"setitup/ble.md",key:"v-cf2ed192",path:"/setitup/ble.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"GSM 2G gateway",frontmatter:{},regularPath:"/setitup/gsm.html",relativePath:"setitup/gsm.md",key:"v-b5aec012",path:"/setitup/gsm.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"},{level:2,title:"Hardware setup",slug:"hardware-setup"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"IR gateway",frontmatter:{},regularPath:"/setitup/ir.html",relativePath:"setitup/ir.md",key:"v-eab731fa",path:"/setitup/ir.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"},{level:2,title:"Pinout",slug:"pinout"},{level:2,title:"ESP8266 Hardware setup",slug:"esp8266-hardware-setup"},{level:2,title:"ESP32 Hardware setup",slug:"esp32-hardware-setup"},{level:2,title:"Credits",slug:"credits"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"LoRa gateway",frontmatter:{},regularPath:"/setitup/lora.html",relativePath:"setitup/lora.md",key:"v-0d1e8e9e",path:"/setitup/lora.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"RF gateway (433mhz/315mhz)",frontmatter:{},regularPath:"/setitup/rf.html",relativePath:"setitup/rf.md",key:"v-2fe62c26",path:"/setitup/rf.html",headers:[{level:2,title:"Protocols, modules and library",slug:"protocols-modules-and-library"},{level:2,title:"Assembly/soldering required parts",slug:"assembly-soldering-required-parts"},{level:3,title:"SRX STX Pinout",slug:"srx-stx-pinout"},{level:3,title:"CC1101 Pinout",slug:"cc1101-pinout"},{level:2,title:"ESP32 Hardware setup",slug:"esp32-hardware-setup"},{level:2,title:"ESP8266 Hardware setup",slug:"esp8266-hardware-setup"},{level:2,title:"SONOFF RF Bridge Hardware setup",slug:"sonoff-rf-bridge-hardware-setup"},{level:2,title:"SONOFF RFR3 Hardware setup",slug:"sonoff-rfr3-hardware-setup"},{level:2,title:"WIFI RF GATEWAY Hardware setup",slug:"wifi-rf-gateway-hardware-setup"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Sensors",frontmatter:{},regularPath:"/setitup/sensors.html",relativePath:"setitup/sensors.md",key:"v-aa1cc612",path:"/setitup/sensors.html",headers:[{level:2,title:"Compatible sensors",slug:"compatible-sensors"},{level:2,title:"Pinout",slug:"pinout"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Serial/RS232 gateway",frontmatter:{},regularPath:"/setitup/serial.html",relativePath:"setitup/serial.md",key:"v-255607ed",path:"/setitup/serial.html",headers:[{level:2,title:"Compatible parts",slug:"compatible-parts"},{level:2,title:"Pinout",slug:"pinout"},{level:2,title:"ESP8266 Hardware setup",slug:"esp8266-hardware-setup"},{level:2,title:"ESP32 Hardware setup",slug:"esp32-hardware-setup"},{level:2,title:"Credits",slug:"credits"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Advanced configuration of the gateway",frontmatter:{},regularPath:"/upload/advanced-configuration.html",relativePath:"upload/advanced-configuration.md",key:"v-7df515d2",path:"/upload/advanced-configuration.html",headers:[{level:2,title:"Secure connection to the broker",slug:"secure-connection-to-the-broker"},{level:3,title:"Prerequisites",slug:"prerequisites"},{level:3,title:"Configure secure connection in the gateway",slug:"configure-secure-connection-in-the-gateway"},{level:2,title:'Add the received "value" at the end of the topic',slug:"add-the-received-value-at-the-end-of-the-topic"},{level:2,title:"Auto discovery",slug:"auto-discovery"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"(Option 2) Upload ready-to-go binaries",frontmatter:{},regularPath:"/upload/binaries.html",relativePath:"upload/binaries.md",key:"v-6e14dcd7",path:"/upload/binaries.html",headers:[{level:2,title:"ESP32",slug:"esp32"},{level:3,title:"Linux - esptool.py",slug:"linux-esptool-py"},{level:3,title:"Mac - esptool.py",slug:"mac-esptool-py"},{level:2,title:"ESP8266",slug:"esp8266"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"(Option 3) Upload your configurations",frontmatter:{},regularPath:"/upload/builds.html",relativePath:"upload/builds.md",key:"v-303bd052",path:"/upload/builds.html",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Configure & Upload with PlatformIO",slug:"configure-upload-with-platformio"},{level:3,title:"(Option A) Creating a portable config file",slug:"option-a-creating-a-portable-config-file"},{level:3,title:"(Option B) Editing files directly",slug:"option-b-editing-files-directly"},{level:2,title:"API",slug:"api"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"(Option 4) Build from the web",frontmatter:{},regularPath:"/upload/gitpod.html",relativePath:"upload/gitpod.md",key:"v-2c32e617",path:"/upload/gitpod.html",lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Troubleshooting",frontmatter:{},regularPath:"/upload/troubleshoot.html",relativePath:"upload/troubleshoot.md",key:"v-246d3f77",path:"/upload/troubleshoot.html",headers:[{level:2,title:"Compilation/build error",slug:"compilation-build-error"},{level:2,title:"ESP32 compilation errors related to WiFi",slug:"esp32-compilation-errors-related-to-wifi"},{level:2,title:"Not able to send or receive RF or IR",slug:"not-able-to-send-or-receive-rf-or-ir"},{level:2,title:"Repetitive MQTT disconnections or/and commands sent to the gateway not taken into account",slug:"repetitive-mqtt-disconnections-or-and-commands-sent-to-the-gateway-not-taken-into-account"},{level:2,title:"OMG ignores messages sent to it via MQTT",slug:"omg-ignores-messages-sent-to-it-via-mqtt"},{level:2,title:"ESP Continuous restart or strange behaviour:",slug:"esp-continuous-restart-or-strange-behaviour"},{level:2,title:"ESP does not connect to broker with TLS enabled",slug:"esp-does-not-connect-to-broker-with-tls-enabled"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Wifi and MQTT configuration",frontmatter:{},regularPath:"/upload/portal.html",relativePath:"upload/portal.md",key:"v-27c660f7",path:"/upload/portal.html",headers:[{level:2,title:"Configuration portal",slug:"configuration-portal"},{level:2,title:"Build time configuration",slug:"build-time-configuration"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"(Option 1) Upload from the web",frontmatter:{pageClass:"table-generated-page"},regularPath:"/upload/web-install.html",relativePath:"upload/web-install.md",key:"v-2b7b8f3b",path:"/upload/web-install.html",headers:[{level:2,title:"Using OpenMQTTGateway ?",slug:"using-openmqttgateway"},{level:2,title:"Environments characteristics",slug:"environments-characteristics"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Actuators",frontmatter:{},regularPath:"/use/actuators.html",relativePath:"use/actuators.md",key:"v-0d819412",path:"/use/actuators.html",headers:[{level:2,title:"ON/OFF Functionality",slug:"on-off-functionality"},{level:3,title:"Standard ON/OFF control",slug:"standard-on-off-control"},{level:3,title:"Pulse control for short activations",slug:"pulse-control-for-short-activations"},{level:2,title:"FASTLED",slug:"fastled"},{level:3,title:"The FASTLED module support 2 different operation modes",slug:"the-fastled-module-support-2-different-operation-modes"},{level:3,title:"Hardware wiring",slug:"hardware-wiring"},{level:2,title:"PWM",slug:"pwm"},{level:3,title:"Configuration",slug:"configuration"},{level:3,title:"Usage",slug:"usage"},{level:2,title:"Somfy RTS",slug:"somfy-rts"},{level:3,title:"Setup",slug:"setup"},{level:3,title:"Commands",slug:"commands"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Boards",frontmatter:{},regularPath:"/use/boards.html",relativePath:"use/boards.md",key:"v-3043a2b9",path:"/use/boards.html",headers:[{level:2,title:"ESP",slug:"esp"},{level:3,title:"Erasing the flash",slug:"erasing-the-flash"},{level:3,title:"Wifi interference on sensors when using an ESP",slug:"wifi-interference-on-sensors-when-using-an-esp"},{level:3,title:"Low power mode for ESP32",slug:"low-power-mode-for-esp32"},{level:2,title:"M5StickC, M5StickC Plus or M5Stack",slug:"m5stickc-m5stickc-plus-or-m5stack"},{level:3,title:"Behaviour",slug:"behaviour"},{level:3,title:"Setting the log output",slug:"setting-the-log-output"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Bluetooth ESP32 gateway",frontmatter:{title:"Bluetooth ESP32 gateway",description:"Versatile Bluetooth gateway that scans and decodes data from various Bluetooth Low Energy (BLE) devices. It integrates seamlessly with MQTT brokers and controllers like Home Assistant and OpenHAB. Monitor temperature, humidity, pressure, and more for smarter control."},regularPath:"/use/ble.html",relativePath:"use/ble.md",key:"v-bbb970d2",path:"/use/ble.html",headers:[{level:2,title:"Products powered by OpenMQTTGateway",slug:"products-powered-by-openmqttgateway"},{level:3,title:"Theengs Bridge, BLE gateway with external antenna",slug:"theengs-bridge-ble-gateway-with-external-antenna"},{level:3,title:"Theengs Plug, BLE gateway and Smart Plug",slug:"theengs-plug-ble-gateway-and-smart-plug"},{level:2,title:"Disable or enable the BLE gateway (default: true, available with HA discovery)",slug:"disable-or-enable-the-ble-gateway-default-true-available-with-ha-discovery"},{level:2,title:"Receiving signals from compatible BLE sensors to publish it to an MQTT broker.",slug:"receiving-signals-from-compatible-ble-sensors-to-publish-it-to-an-mqtt-broker"},{level:2,title:"Receiving signals from BLE devices for Device Tracker detection",slug:"receiving-signals-from-ble-devices-for-device-tracker-detection"},{level:2,title:"Receiving signals from BLE devices for Presence detection",slug:"receiving-signals-from-ble-devices-for-presence-detection"},{level:2,title:"Receiving signals from BLE devices with accelerometers for movement detection",slug:"receiving-signals-from-ble-devices-with-accelerometers-for-movement-detection"},{level:2,title:"Setting a white or black list",slug:"setting-a-white-or-black-list"},{level:2,title:"Setting the time between BLE scans and force a scan (available with HA discovery)",slug:"setting-the-time-between-ble-scans-and-force-a-scan-available-with-ha-discovery"},{level:2,title:"Setting the time between connection attempts (default: 60min, available with HA discovery)",slug:"setting-the-time-between-connection-attempts-default-60min-available-with-ha-discovery"},{level:2,title:"Setting if the gateway publishes all the BLE devices scanned or only the detected sensors (default: false, available with HA discovery)",slug:"setting-if-the-gateway-publishes-all-the-ble-devices-scanned-or-only-the-detected-sensors-default-false-available-with-ha-discovery"},{level:2,title:"Setting if the gateway publishes known devices which randomly change their MAC address (default: false)",slug:"setting-if-the-gateway-publishes-known-devices-which-randomly-change-their-mac-address-default-false"},{level:2,title:"Setting if the gateway use adaptive scanning (default: true, available with HA discovery)",slug:"setting-if-the-gateway-use-adaptive-scanning-default-true-available-with-ha-discovery"},{level:2,title:"Setting the time between active scanning (available with HA discovery)",slug:"setting-the-time-between-active-scanning-available-with-ha-discovery"},{level:2,title:"Setting the duration of a scan (available with HA discovery)",slug:"setting-the-duration-of-a-scan-available-with-ha-discovery"},{level:2,title:"Setting if the gateway connects to BLE devices eligibles (default: true, available with HA discovery)",slug:"setting-if-the-gateway-connects-to-ble-devices-eligibles-default-true-available-with-ha-discovery"},{level:2,title:"Setting if the gateway publish into Home Assistant Home presence topic (default: false, available with HA discovery)",slug:"setting-if-the-gateway-publish-into-home-assistant-home-presence-topic-default-false-available-with-ha-discovery"},{level:2,title:"Setting if the gateway uses iBeacon UUID as topic, instead of (random) MAC address (default: false)",slug:"setting-if-the-gateway-uses-ibeacon-uuid-as-topic-instead-of-random-mac-address-default-false"},{level:2,title:"Setting the minimum RSSI accepted to publish device data (default:-100)",slug:"setting-the-minimum-rssi-accepted-to-publish-device-data-default-100"},{level:2,title:"Store BLE configuration into the gateway",slug:"store-ble-configuration-into-the-gateway"},{level:2,title:"Controlling devices",slug:"controlling-devices"},{level:2,title:"Read/write BLE characteristics over MQTT",slug:"read-write-ble-characteristics-over-mqtt"},{level:3,title:"Example write command",slug:"example-write-command"},{level:3,title:"Example read command",slug:"example-read-command"},{level:2,title:"SwitchBot Bot control (available with HA discovery)",slug:"switchbot-bot-control-available-with-ha-discovery"},{level:3,title:"Set the SwitchBot Bot state to ON:",slug:"set-the-switchbot-bot-state-to-on"},{level:3,title:"Set the SwitchBot Bot state to OFF:",slug:"set-the-switchbot-bot-state-to-off"},{level:3,title:"Set the SwitchBot Bot to PRESS:",slug:"set-the-switchbot-bot-to-press"},{level:3,title:"Set the SwitchBot Bot to go UP:",slug:"set-the-switchbot-bot-to-go-up"},{level:3,title:"Set the SwitchBot Bot to go DOWN:",slug:"set-the-switchbot-bot-to-go-down"},{level:2,title:"SwitchBot Blind Tilt control (available with HA discovery)",slug:"switchbot-blind-tilt-control-available-with-ha-discovery"},{level:3,title:"Set the SwitchBot Blind Tilt state to OPEN:",slug:"set-the-switchbot-blind-tilt-state-to-open"},{level:3,title:"Set the SwitchBot Blind Tilt state to CLOSE_DOWN:",slug:"set-the-switchbot-blind-tilt-state-to-close-down"},{level:3,title:"Set the SwitchBot Blind Tilt state to CLOSE_UP:",slug:"set-the-switchbot-blind-tilt-state-to-close-up"},{level:3,title:"Set the SwitchBot Blind Tilt state to a percentage (0-100):",slug:"set-the-switchbot-blind-tilt-state-to-a-percentage-0-100"},{level:3,title:"Set the SwitchBot Blind Tilt to Stop:",slug:"set-the-switchbot-blind-tilt-to-stop"},{level:3,title:"Response (assuming success):",slug:"response-assuming-success"},{level:2,title:"SwitchBot Curtain (2/3) control (available with HA discovery)",slug:"switchbot-curtain-2-3-control-available-with-ha-discovery"},{level:3,title:"Set the SwitchBot Curtain state to OPEN:",slug:"set-the-switchbot-curtain-state-to-open"},{level:3,title:"Set the SwitchBot Curtain state to CLOSE:",slug:"set-the-switchbot-curtain-state-to-close"},{level:3,title:"Set the SwitchBot Curtain to a percentage (0-100):",slug:"set-the-switchbot-curtain-to-a-percentage-0-100"},{level:3,title:"Set the SwitchBot Curtain to Stop:",slug:"set-the-switchbot-curtain-to-stop"},{level:3,title:"Response (assuming success):",slug:"response-assuming-success-2"},{level:2,title:"ADVANCED: Setting up an external decoder",slug:"advanced-setting-up-an-external-decoder"},{level:2,title:"ADVANCED: Filtering out connectable devices (default: false)",slug:"advanced-filtering-out-connectable-devices-default-false"},{level:2,title:"ADVANCED: Advertisement and advanced data (default: false, available with HA discovery)",slug:"advanced-advertisement-and-advanced-data-default-false-available-with-ha-discovery"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Displays",frontmatter:{},regularPath:"/use/displays.html",relativePath:"use/displays.md",key:"v-288d7b9e",path:"/use/displays.html",headers:[{level:2,title:"SSD1306 Display (Heltec SX127X, LILYGO® LoRa32 boards, generic SSD1306 displays)",slug:"ssd1306-display-heltec-sx127x-lilygo®-lora32-boards-generic-ssd1306-displays"},{level:3,title:"Display ON/OFF",slug:"display-on-off"},{level:3,title:"Brightness",slug:"brightness"},{level:3,title:"Metric or Imperial property units",slug:"metric-or-imperial-property-units"},{level:3,title:"Rotating the display by 180 degrees",slug:"rotating-the-display-by-180-degrees"},{level:3,title:"Display idle Logo",slug:"display-idle-logo"},{level:3,title:"Setting the log output",slug:"setting-the-log-output"},{level:3,title:"Displaying Module json messages (default)",slug:"displaying-module-json-messages-default"},{level:3,title:"Store the current display configuration in the gateway",slug:"store-the-current-display-configuration-in-the-gateway"},{level:3,title:"Connecting a generic SSD1306 display to ESP32",slug:"connecting-a-generic-ssd1306-display-to-esp32"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"System commands (ESP only)",frontmatter:{},regularPath:"/use/gateway.html",relativePath:"use/gateway.md",key:"v-20c05837",path:"/use/gateway.html",headers:[{level:2,title:"Restart the ESP",slug:"restart-the-esp"},{level:2,title:"Erase the ESP settings",slug:"erase-the-esp-settings"},{level:2,title:"Retrieve current status of the ESP",slug:"retrieve-current-status-of-the-esp"},{level:2,title:"Auto discovery",slug:"auto-discovery"},{level:3,title:"Deactivate",slug:"deactivate"},{level:3,title:"Activate",slug:"activate"},{level:2,title:"Activate Offline mode",slug:"activate-offline-mode"},{level:2,title:"Change the WiFi credentials",slug:"change-the-wifi-credentials"},{level:2,title:"Change the gateway password",slug:"change-the-gateway-password"},{level:2,title:"Change the MQTT broker credentials",slug:"change-the-mqtt-broker-credentials"},{level:2,title:"Change the MQTT main topic, discovery prefix, and or gateway name",slug:"change-the-mqtt-main-topic-discovery-prefix-and-or-gateway-name"},{level:2,title:"Switching brokers and using signed and client certificates",slug:"switching-brokers-and-using-signed-and-client-certificates"},{level:2,title:"Saving/Loading connection parameters/certificates at runtime",slug:"saving-loading-connection-parameters-certificates-at-runtime"},{level:3,title:"Storing and Loading Certificates",slug:"storing-and-loading-certificates"},{level:3,title:"Use Case: Changing a Group of Certificates",slug:"use-case-changing-a-group-of-certificates"},{level:2,title:"MQTT",slug:"mqtt"},{level:2,title:"Serial",slug:"serial"},{level:2,title:"Change the LED indicator brightness",slug:"change-the-led-indicator-brightness"},{level:2,title:"Understanding LED Indicators in OpenMQTTGateway",slug:"understanding-led-indicators-in-openmqttgateway"},{level:2,title:"LED Color Guide",slug:"led-color-guide"},{level:2,title:"Understanding Gateway States",slug:"understanding-gateway-states"},{level:3,title:"Power On",slug:"power-on"},{level:3,title:"Processing",slug:"processing"},{level:3,title:"Waiting for Onboarding",slug:"waiting-for-onboarding"},{level:3,title:"Onboarding in Progress",slug:"onboarding-in-progress"},{level:3,title:"Network Connected",slug:"network-connected"},{level:3,title:"Network Disconnected",slug:"network-disconnected"},{level:3,title:"MQTT Broker Connected",slug:"mqtt-broker-connected"},{level:3,title:"MQTT Broker Disconnected",slug:"mqtt-broker-disconnected"},{level:3,title:"Offline",slug:"offline"},{level:3,title:"Local OTA Update",slug:"local-ota-update"},{level:3,title:"Remote OTA Update",slug:"remote-ota-update"},{level:3,title:"Error",slug:"error"},{level:3,title:"Actuator On/Off",slug:"actuator-on-off"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"GSM 2G gateway",frontmatter:{},regularPath:"/use/gsm.html",relativePath:"use/gsm.md",key:"v-131b9357",path:"/use/gsm.html",headers:[{level:2,title:"Receiving SMS from 2G",slug:"receiving-sms-from-2g"},{level:2,title:"Send data by MQTT to send an SMS message with A6/7",slug:"send-data-by-mqtt-to-send-an-sms-message-with-a6-7"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Infrared gateway",frontmatter:{title:"Infrared gateway",description:"Unlock the potential of Infrared technology with our universal gateway. Decode signals from various devices, and integrate seamlessly with MQTT systems abd controllers like Home Assistant and OpenHAB."},regularPath:"/use/ir.html",relativePath:"use/ir.md",key:"v-a9ffe0fe",path:"/use/ir.html",headers:[{level:2,title:"Receiving data from IR signal",slug:"receiving-data-from-ir-signal"},{level:2,title:"Send data by MQTT to convert it on IR signal",slug:"send-data-by-mqtt-to-convert-it-on-ir-signal"},{level:2,title:"Send data by MQTT from Global Caché database to convert it on IR signal",slug:"send-data-by-mqtt-from-global-cache-database-to-convert-it-on-ir-signal"},{level:2,title:"Send data by MQTT with advanced IR parameters",slug:"send-data-by-mqtt-with-advanced-ir-parameters"},{level:2,title:"Send raw IR data by MQTT",slug:"send-raw-ir-data-by-mqtt"},{level:2,title:"Repeat the IR signal OpenMQTTGateway receive",slug:"repeat-the-ir-signal-openmqttgateway-receive"},{level:2,title:"Raw IR signal forwarding",slug:"raw-ir-signal-forwarding"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"RF gateways (RTL_433/RCSwitch/RF/RF2)",frontmatter:{title:"RF gateways (RTL_433/RCSwitch/RF/RF2)",description:"Unlock the potential of RF 433 MHz technology with our universal gateway. Decode signals from various devices, and integrate seamlessly with MQTT systems and controllers like Home Assistant and OpenHAB."},regularPath:"/use/rf.html",relativePath:"use/rf.md",key:"v-947f362a",path:"/use/rf.html",headers:[{level:2,title:"What is an RF gateway",slug:"what-is-an-rf-gateway"},{level:2,title:"Common parameters accross modules",slug:"common-parameters-accross-modules"},{level:3,title:"Change default frequency (SX127X and CC1101)",slug:"change-default-frequency-sx127x-and-cc1101"},{level:3,title:"Changing Active Receiver Modules",slug:"changing-active-receiver-modules"},{level:2,title:"RTL_433 device decoders",slug:"rtl-433-device-decoders"},{level:3,title:"Supported hardware combinations",slug:"supported-hardware-combinations"},{level:3,title:"Supported Decoders",slug:"supported-decoders"},{level:3,title:"Change Signal RSSI Threshold Delta",slug:"change-signal-rssi-threshold-delta"},{level:3,title:"Retrieve current status of receiver",slug:"retrieve-current-status-of-receiver"},{level:2,title:"RCSwitch based gateway",slug:"rcswitch-based-gateway"},{level:3,title:"Handling RF signal over MQTT",slug:"handling-rf-signal-over-mqtt"},{level:3,title:"Send data by MQTT with advanced RF parameters",slug:"send-data-by-mqtt-with-advanced-rf-parameters"},{level:2,title:"Pilight gateway",slug:"pilight-gateway"},{level:3,title:"Receiving data from RF signal",slug:"receiving-data-from-rf-signal-2"},{level:3,title:"Limit Protocols",slug:"limit-protocols"},{level:3,title:"Send data by MQTT to transmit a RF signal",slug:"send-data-by-mqtt-to-transmit-a-rf-signal"},{level:2,title:"RF with SONOFF RF BRIDGE",slug:"rf-with-sonoff-rf-bridge"},{level:3,title:"Receiving data from RF signal",slug:"receiving-data-from-rf-signal-3"},{level:3,title:"Send data by MQTT to convert it on RF signal",slug:"send-data-by-mqtt-to-convert-it-on-rf-signal"},{level:3,title:"Send data by MQTT with advanced RF parameters",slug:"send-data-by-mqtt-with-advanced-rf-parameters-2"},{level:2,title:"RF2 gateway KAKU",slug:"rf2-gateway-kaku"},{level:3,title:"Receiving data from KAKU signal",slug:"receiving-data-from-kaku-signal"},{level:3,title:"Send data by MQTT to convert it on KAKU signal",slug:"send-data-by-mqtt-to-convert-it-on-kaku-signal"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"LoRa gateway",frontmatter:{title:"LoRa gateway",description:"Explore the LoRa MQTT gateway, designed for integration with devices utilizing LoRa technology, including the MakerFab soil and moisture sensor, devices from PricelessTookit. Unlock long range communication with the power of LoRa.."},regularPath:"/use/lora.html",relativePath:"use/lora.md",key:"v-749f316f",path:"/use/lora.html",headers:[{level:2,title:"What is a LoRa gateway",slug:"what-is-a-lora-gateway"},{level:2,title:"Configuring the LoRa gateway",slug:"configuring-the-lora-gateway"},{level:2,title:"Receiving data from LoRa signal",slug:"receiving-data-from-lora-signal"},{level:2,title:"Send data by MQTT to convert it on LoRa signal",slug:"send-data-by-mqtt-to-convert-it-on-lora-signal"},{level:2,title:"Send data by MQTT with advanced LoRa parameters",slug:"send-data-by-mqtt-with-advanced-lora-parameters"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"RFM69 gateway",frontmatter:{},regularPath:"/use/rfm69.html",relativePath:"use/rfm69.md",key:"v-21b208b7",path:"/use/rfm69.html",headers:[{level:3,title:"Receiving data from RFM signal",slug:"receiving-data-from-rfm-signal"},{level:3,title:"Send data by MQTT to convert it on RFM69 signal",slug:"send-data-by-mqtt-to-convert-it-on-rfm69-signal"},{level:3,title:"Send data by MQTT with advanced RFM69 parameters",slug:"send-data-by-mqtt-with-advanced-rfm69-parameters"},{level:3,title:"RFM69 acknowledgment",slug:"rfm69-acknowledgment"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"RS232/Serial gateway",frontmatter:{},regularPath:"/use/serial.html",relativePath:"use/serial.md",key:"v-93d2a72a",path:"/use/serial.html",headers:[{level:2,title:"Sending an SERIAL message",slug:"sending-an-serial-message"},{level:2,title:"Receiving an SERIAL message",slug:"receiving-an-serial-message"},{level:3,title:"Single MQTT message mode (default)",slug:"single-mqtt-message-mode-default"},{level:3,title:"JSON mode",slug:"json-mode"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"WebUI",frontmatter:{},regularPath:"/use/webui.html",relativePath:"use/webui.md",key:"v-2566e137",path:"/use/webui.html",headers:[{level:2,title:"WiFi",slug:"wifi"},{level:2,title:"MQTT",slug:"mqtt"},{level:2,title:"WebUI",slug:"webui-2"},{level:2,title:"Bluetooth Low Energy - BLE",slug:"bluetooth-low-energy-ble"},{level:2,title:"Logging",slug:"logging"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3},{title:"Sensors",frontmatter:{},regularPath:"/use/sensors.html",relativePath:"use/sensors.md",key:"v-2494b4d7",path:"/use/sensors.html",headers:[{level:3,title:"ADC",slug:"adc"},{level:3,title:"DHT",slug:"dht"},{level:3,title:"HTU21",slug:"htu21"},{level:3,title:"AHTx0 (AHT10 and AHT20)",slug:"ahtx0-aht10-and-aht20"},{level:3,title:"DS18x20",slug:"ds18x20"},{level:3,title:"HCSR501",slug:"hcsr501"},{level:3,title:"RN8209",slug:"rn8209"},{level:3,title:"Touch",slug:"touch"}],lastUpdated:"12/7/2025, 10:45:07 PM",lastUpdatedTimestamp:1765147507e3}],themeConfig:{repo:"1technophile/OpenMQTTGateway",docsDir:"docs",smoothScroll:!0,search:!1,docsBranch:"development",lastUpdated:"Last Updated",editLinks:!0,nav:[{text:"Home",link:"https://www.theengs.io",target:"_self",rel:""},{text:"Use cases",items:[{text:"Smart Home",link:"https://www.theengs.io/usecases/smarthome.html",target:"_self",rel:""},{text:"IoT",link:"https://www.theengs.io/usecases/iot.html",target:"_self",rel:""},{text:"Research",link:"https://www.theengs.io/usecases/research.html",target:"_self",rel:""}]},{text:"Solutions",items:[{text:"Hardware",items:[{text:"Theengs Plug",link:"https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumption",target:"_self",rel:""},{text:"Theengs Bridge",link:"https://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antenna",target:"_self",rel:""}]},{text:"Software",items:[{text:"Mobile App",link:"https://app.theengs.io",target:"_self",rel:""},{text:"OpenMQTTGateway",link:"https://docs.openmqttgateway.com",target:"_self",rel:""},{text:"Gateway",link:"https://gateway.theengs.io",target:"_self",rel:""}]},{text:"Core",items:[{text:"Decoder",link:"https://decoder.theengs.io",target:"_self",rel:""},{text:"Web Parser",link:"https://parser.theengs.io",target:"_self",rel:""}]}]},{text:"Compatible devices",link:"https://decoder.theengs.io/devices/devices.html",target:"_self",rel:""},{text:"Community",link:"https://community.openmqttgateway.com",target:"_self",rel:""},{text:"Shop",link:"https://shop.theengs.io/",target:"_self",rel:""},{text:"Sponsor 🤍",link:"https://github.com/sponsors/theengs",target:"_self",rel:""}],sidebar:[["/","0 - What is it for 🏠"],{title:"1 - Prerequisites🧭",sidebarDepth:1,children:["prerequisites/devices","prerequisites/board","prerequisites/parts","prerequisites/broker","prerequisites/controller"]},{title:"2 - Set it up 🔨",sidebarDepth:1,children:["setitup/rf","setitup/ble","setitup/ir","setitup/lora","setitup/gsm","setitup/serial","setitup/sensors","setitup/actuators"]},{title:"3 - Upload ➡️",sidebarDepth:1,children:["upload/web-install","upload/binaries","upload/builds","upload/gitpod","upload/portal","upload/advanced-configuration","upload/troubleshoot"]},{title:"4 - Use ✈️",sidebarDepth:1,children:["use/rf","use/ble","use/ir","use/lora","use/gsm","use/serial","use/rfm69","use/sensors","use/actuators","use/boards","use/displays","use/gateway","use/webui"]},{title:"5 - Integrate 🎉",sidebarDepth:1,children:["integrate/openhab2","integrate/openhab3","integrate/home_assistant","integrate/node_red","integrate/aws_iot","integrate/jeedom"]},{title:"6 - Participate 💻",sidebarDepth:1,children:["participate/support","participate/development","participate/adding-protocols","participate/community",["https://github.com/1technophile/OpenMQTTGateway/blob/development/LICENSE.txt","License"]]}]}};n(235);Qn.component("web-uploader",()=>n.e(47).then(n.bind(null,423))),Qn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,419))),Qn.component("Badge",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,424))),Qn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,420)));n(236),n(237);function Rs(t){const e=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-e.left,y:n.top-e.top}}var Us=[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({Vue:t,router:e})=>{e.options.scrollBehavior=(e,n,r)=>{if(r)return window.scrollTo({top:r.y,behavior:"smooth"});if(e.hash){if(t.$vuepress.$get("disableScrollBehavior"))return!1;const n=document.querySelector(e.hash);return!!n&&window.scrollTo({top:Rs(n).y,behavior:"smooth"})}return window.scrollTo({top:0,behavior:"smooth"})}}],Is=[];class Bs extends class{constructor(){this.store=new Qn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Qn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Bs.prototype,{getPageAsyncComponent:ss,getLayoutAsyncComponent:ls,getAsyncComponent:cs,getVueComponent:us});var Ds={install(t){const e=new Bs;t.$vuepress=e,t.prototype.$vuepress=e}};function Fs(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var qs={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return ps("pageKey",e),Qn.component(e)||Qn.component(e,ss(e)),Qn.component(e)?t(e):t("")}},Ns={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Hs={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},zs=(n(238),n(239),Object($s.a)(Hs,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Vs={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Qn.config.productionTip=!1,Qn.use(Va),Qn.use(Ds),Qn.mixin(function(t,e,n=Qn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Qn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Fs(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Fs(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Fs(t,o)?r(o):Fs(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Us.filter(t=>"function"==typeof t).map(e=>e({Vue:Qn,options:r,router:n,siteData:Ls,isServer:t})))}catch(t){console.error(t)}return{app:new Qn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Is.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file diff --git a/dev/firmware_build/airm2m_core_esp32c3-firmware.bin b/dev/firmware_build/airm2m_core_esp32c3-firmware.bin index 3ae7482f..147ae06e 100644 Binary files a/dev/firmware_build/airm2m_core_esp32c3-firmware.bin and b/dev/firmware_build/airm2m_core_esp32c3-firmware.bin differ diff --git a/dev/firmware_build/esp32-lolin32lite-ble-firmware.bin b/dev/firmware_build/esp32-lolin32lite-ble-firmware.bin index 3fc58bee..95c03bd6 100644 Binary files a/dev/firmware_build/esp32-lolin32lite-ble-firmware.bin and b/dev/firmware_build/esp32-lolin32lite-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32-m5atom-lite-firmware.bin b/dev/firmware_build/esp32-m5atom-lite-firmware.bin index fdab1753..4d84b53b 100644 Binary files a/dev/firmware_build/esp32-m5atom-lite-firmware.bin and b/dev/firmware_build/esp32-m5atom-lite-firmware.bin differ diff --git a/dev/firmware_build/esp32-m5atom-matrix-firmware.bin b/dev/firmware_build/esp32-m5atom-matrix-firmware.bin index d845a047..d8988ad3 100644 Binary files a/dev/firmware_build/esp32-m5atom-matrix-firmware.bin and b/dev/firmware_build/esp32-m5atom-matrix-firmware.bin differ diff --git a/dev/firmware_build/esp32-m5stack-ble-firmware.bin b/dev/firmware_build/esp32-m5stack-ble-firmware.bin index 22a183f1..e97e1b24 100644 Binary files a/dev/firmware_build/esp32-m5stack-ble-firmware.bin and b/dev/firmware_build/esp32-m5stack-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32-m5stick-ble-firmware.bin b/dev/firmware_build/esp32-m5stick-ble-firmware.bin index 2947c343..c2839074 100644 Binary files a/dev/firmware_build/esp32-m5stick-ble-firmware.bin and b/dev/firmware_build/esp32-m5stick-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32-m5stick-c-ble-firmware.bin b/dev/firmware_build/esp32-m5stick-c-ble-firmware.bin index f6daefd4..bb458c60 100644 Binary files a/dev/firmware_build/esp32-m5stick-c-ble-firmware.bin and b/dev/firmware_build/esp32-m5stick-c-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32-m5stick-cp-ble-firmware.bin b/dev/firmware_build/esp32-m5stick-cp-ble-firmware.bin index 364cf441..e1b1ce77 100644 Binary files a/dev/firmware_build/esp32-m5stick-cp-ble-firmware.bin and b/dev/firmware_build/esp32-m5stick-cp-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32-m5tough-ble-firmware.bin b/dev/firmware_build/esp32-m5tough-ble-firmware.bin index cf79f5cb..fc5e7ae3 100644 Binary files a/dev/firmware_build/esp32-m5tough-ble-firmware.bin and b/dev/firmware_build/esp32-m5tough-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32-olimex-gtw-ble-eth-firmware.bin b/dev/firmware_build/esp32-olimex-gtw-ble-eth-firmware.bin index e60f4432..ff683379 100644 Binary files a/dev/firmware_build/esp32-olimex-gtw-ble-eth-firmware.bin and b/dev/firmware_build/esp32-olimex-gtw-ble-eth-firmware.bin differ diff --git a/dev/firmware_build/esp32-olimex-gtw-ble-poe-firmware.bin b/dev/firmware_build/esp32-olimex-gtw-ble-poe-firmware.bin index ff89bd97..6b5d1d2d 100644 Binary files a/dev/firmware_build/esp32-olimex-gtw-ble-poe-firmware.bin and b/dev/firmware_build/esp32-olimex-gtw-ble-poe-firmware.bin differ diff --git a/dev/firmware_build/esp32-olimex-gtw-ble-poe-iso-firmware.bin b/dev/firmware_build/esp32-olimex-gtw-ble-poe-iso-firmware.bin index 71d8c588..345c8a2c 100644 Binary files a/dev/firmware_build/esp32-olimex-gtw-ble-poe-iso-firmware.bin and b/dev/firmware_build/esp32-olimex-gtw-ble-poe-iso-firmware.bin differ diff --git a/dev/firmware_build/esp32-olimex-gtw-ble-wifi-firmware.bin b/dev/firmware_build/esp32-olimex-gtw-ble-wifi-firmware.bin index 6fc2cf18..d0b6f333 100644 Binary files a/dev/firmware_build/esp32-olimex-gtw-ble-wifi-firmware.bin and b/dev/firmware_build/esp32-olimex-gtw-ble-wifi-firmware.bin differ diff --git a/dev/firmware_build/esp32-wt32-eth01-ble-eth-firmware.bin b/dev/firmware_build/esp32-wt32-eth01-ble-eth-firmware.bin index a349ac86..90614988 100644 Binary files a/dev/firmware_build/esp32-wt32-eth01-ble-eth-firmware.bin and b/dev/firmware_build/esp32-wt32-eth01-ble-eth-firmware.bin differ diff --git a/dev/firmware_build/esp32c3-dev-c2-ble-firmware.bin b/dev/firmware_build/esp32c3-dev-c2-ble-firmware.bin index df0f4e2a..8e3adb64 100644 Binary files a/dev/firmware_build/esp32c3-dev-c2-ble-firmware.bin and b/dev/firmware_build/esp32c3-dev-c2-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32c3-dev-c2-ble-no-serial-firmware.bin b/dev/firmware_build/esp32c3-dev-c2-ble-no-serial-firmware.bin index f0d5606f..e5444b04 100644 Binary files a/dev/firmware_build/esp32c3-dev-c2-ble-no-serial-firmware.bin and b/dev/firmware_build/esp32c3-dev-c2-ble-no-serial-firmware.bin differ diff --git a/dev/firmware_build/esp32c3-dev-m1-ble-firmware.bin b/dev/firmware_build/esp32c3-dev-m1-ble-firmware.bin index c9f1d4cb..10d7835e 100644 Binary files a/dev/firmware_build/esp32c3-dev-m1-ble-firmware.bin and b/dev/firmware_build/esp32c3-dev-m1-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32c3-m5stamp-firmware.bin b/dev/firmware_build/esp32c3-m5stamp-firmware.bin index 248c8b1c..da478a67 100644 Binary files a/dev/firmware_build/esp32c3-m5stamp-firmware.bin and b/dev/firmware_build/esp32c3-m5stamp-firmware.bin differ diff --git a/dev/firmware_build/esp32c3_lolin_mini-firmware.bin b/dev/firmware_build/esp32c3_lolin_mini-firmware.bin index 49814527..c28e4808 100644 Binary files a/dev/firmware_build/esp32c3_lolin_mini-firmware.bin and b/dev/firmware_build/esp32c3_lolin_mini-firmware.bin differ diff --git a/dev/firmware_build/esp32c3_lolin_mini_with_serial-firmware.bin b/dev/firmware_build/esp32c3_lolin_mini_with_serial-firmware.bin index 591a7c36..9e9fdc3d 100644 Binary files a/dev/firmware_build/esp32c3_lolin_mini_with_serial-firmware.bin and b/dev/firmware_build/esp32c3_lolin_mini_with_serial-firmware.bin differ diff --git a/dev/firmware_build/esp32c3u-m5stamp-firmware.bin b/dev/firmware_build/esp32c3u-m5stamp-firmware.bin index 16735732..b34fb7b7 100644 Binary files a/dev/firmware_build/esp32c3u-m5stamp-firmware.bin and b/dev/firmware_build/esp32c3u-m5stamp-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-ble-aws-firmware.bin b/dev/firmware_build/esp32dev-ble-aws-firmware.bin index 13827523..e1fd08c1 100644 Binary files a/dev/firmware_build/esp32dev-ble-aws-firmware.bin and b/dev/firmware_build/esp32dev-ble-aws-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-ble-broker-firmware.bin b/dev/firmware_build/esp32dev-ble-broker-firmware.bin index 28348553..971a5ca6 100644 Binary files a/dev/firmware_build/esp32dev-ble-broker-firmware.bin and b/dev/firmware_build/esp32dev-ble-broker-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-ble-datatest-firmware.bin b/dev/firmware_build/esp32dev-ble-datatest-firmware.bin index 719316c0..d62d4c74 100644 Binary files a/dev/firmware_build/esp32dev-ble-datatest-firmware.bin and b/dev/firmware_build/esp32dev-ble-datatest-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-ble-firmware.bin b/dev/firmware_build/esp32dev-ble-firmware.bin index e978cff8..2a26f50e 100644 Binary files a/dev/firmware_build/esp32dev-ble-firmware.bin and b/dev/firmware_build/esp32dev-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-ble-idf-bootloader.bin b/dev/firmware_build/esp32dev-ble-idf-bootloader.bin index ed86dc24..c2bc5f5d 100644 Binary files a/dev/firmware_build/esp32dev-ble-idf-bootloader.bin and b/dev/firmware_build/esp32dev-ble-idf-bootloader.bin differ diff --git a/dev/firmware_build/esp32dev-ble-idf-firmware.bin b/dev/firmware_build/esp32dev-ble-idf-firmware.bin index dc7c4cff..7604b312 100644 Binary files a/dev/firmware_build/esp32dev-ble-idf-firmware.bin and b/dev/firmware_build/esp32dev-ble-idf-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-ble-mqtt-undecoded-firmware.bin b/dev/firmware_build/esp32dev-ble-mqtt-undecoded-firmware.bin index f90df054..6ee44ab8 100644 Binary files a/dev/firmware_build/esp32dev-ble-mqtt-undecoded-firmware.bin and b/dev/firmware_build/esp32dev-ble-mqtt-undecoded-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-gf-sun-inverter-firmware.bin b/dev/firmware_build/esp32dev-gf-sun-inverter-firmware.bin index b14ad9da..1626059a 100644 Binary files a/dev/firmware_build/esp32dev-gf-sun-inverter-firmware.bin and b/dev/firmware_build/esp32dev-gf-sun-inverter-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-ir-firmware.bin b/dev/firmware_build/esp32dev-ir-firmware.bin index e40523c4..060cf6e4 100644 Binary files a/dev/firmware_build/esp32dev-ir-firmware.bin and b/dev/firmware_build/esp32dev-ir-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-multi_receiver-firmware.bin b/dev/firmware_build/esp32dev-multi_receiver-firmware.bin index 5854150f..c97c7d29 100644 Binary files a/dev/firmware_build/esp32dev-multi_receiver-firmware.bin and b/dev/firmware_build/esp32dev-multi_receiver-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-multi_receiver-pilight-firmware.bin b/dev/firmware_build/esp32dev-multi_receiver-pilight-firmware.bin index 5e512c07..f6bd047c 100644 Binary files a/dev/firmware_build/esp32dev-multi_receiver-pilight-firmware.bin and b/dev/firmware_build/esp32dev-multi_receiver-pilight-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-pilight-cc1101-firmware.bin b/dev/firmware_build/esp32dev-pilight-cc1101-firmware.bin index b1cfc59e..acf0e73f 100644 Binary files a/dev/firmware_build/esp32dev-pilight-cc1101-firmware.bin and b/dev/firmware_build/esp32dev-pilight-cc1101-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-pilight-firmware.bin b/dev/firmware_build/esp32dev-pilight-firmware.bin index 75baff61..83747f32 100644 Binary files a/dev/firmware_build/esp32dev-pilight-firmware.bin and b/dev/firmware_build/esp32dev-pilight-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-pilight-somfy-cc1101-firmware.bin b/dev/firmware_build/esp32dev-pilight-somfy-cc1101-firmware.bin index 764184d0..512cade6 100644 Binary files a/dev/firmware_build/esp32dev-pilight-somfy-cc1101-firmware.bin and b/dev/firmware_build/esp32dev-pilight-somfy-cc1101-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-rf-firmware.bin b/dev/firmware_build/esp32dev-rf-firmware.bin index 83eac23a..0d3300a3 100644 Binary files a/dev/firmware_build/esp32dev-rf-firmware.bin and b/dev/firmware_build/esp32dev-rf-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-rtl_433-firmware.bin b/dev/firmware_build/esp32dev-rtl_433-firmware.bin index f9c7ed7f..ef56f824 100644 Binary files a/dev/firmware_build/esp32dev-rtl_433-firmware.bin and b/dev/firmware_build/esp32dev-rtl_433-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-rtl_433-fsk-firmware.bin b/dev/firmware_build/esp32dev-rtl_433-fsk-firmware.bin index 63452ff7..dd7bb055 100644 Binary files a/dev/firmware_build/esp32dev-rtl_433-fsk-firmware.bin and b/dev/firmware_build/esp32dev-rtl_433-fsk-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-somfy-cc1101-firmware.bin b/dev/firmware_build/esp32dev-somfy-cc1101-firmware.bin index 77adc2ed..3e61b40a 100644 Binary files a/dev/firmware_build/esp32dev-somfy-cc1101-firmware.bin and b/dev/firmware_build/esp32dev-somfy-cc1101-firmware.bin differ diff --git a/dev/firmware_build/esp32dev-weatherstation-firmware.bin b/dev/firmware_build/esp32dev-weatherstation-firmware.bin index ca401b92..27c21615 100644 Binary files a/dev/firmware_build/esp32dev-weatherstation-firmware.bin and b/dev/firmware_build/esp32dev-weatherstation-firmware.bin differ diff --git a/dev/firmware_build/esp32doitv1-aithinker-r01-sx1278-firmware.bin b/dev/firmware_build/esp32doitv1-aithinker-r01-sx1278-firmware.bin index 53c3f2f6..bd382ed9 100644 Binary files a/dev/firmware_build/esp32doitv1-aithinker-r01-sx1278-firmware.bin and b/dev/firmware_build/esp32doitv1-aithinker-r01-sx1278-firmware.bin differ diff --git a/dev/firmware_build/esp32feather-ble-firmware.bin b/dev/firmware_build/esp32feather-ble-firmware.bin index a247ee7d..d43d20f2 100644 Binary files a/dev/firmware_build/esp32feather-ble-firmware.bin and b/dev/firmware_build/esp32feather-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32s3-atomS3U-firmware.bin b/dev/firmware_build/esp32s3-atomS3U-firmware.bin index a77cade5..657533b7 100644 Binary files a/dev/firmware_build/esp32s3-atomS3U-firmware.bin and b/dev/firmware_build/esp32s3-atomS3U-firmware.bin differ diff --git a/dev/firmware_build/esp32s3-dev-c1-ble-firmware.bin b/dev/firmware_build/esp32s3-dev-c1-ble-firmware.bin index 95017842..077c70b0 100644 Binary files a/dev/firmware_build/esp32s3-dev-c1-ble-firmware.bin and b/dev/firmware_build/esp32s3-dev-c1-ble-firmware.bin differ diff --git a/dev/firmware_build/esp32s3-m5stack-stamps3-firmware.bin b/dev/firmware_build/esp32s3-m5stack-stamps3-firmware.bin index cf6e3f31..d054869a 100644 Binary files a/dev/firmware_build/esp32s3-m5stack-stamps3-firmware.bin and b/dev/firmware_build/esp32s3-m5stack-stamps3-firmware.bin differ diff --git a/dev/firmware_build/heltec-ble-firmware.bin b/dev/firmware_build/heltec-ble-firmware.bin index a2f84e69..e1f35521 100644 Binary files a/dev/firmware_build/heltec-ble-firmware.bin and b/dev/firmware_build/heltec-ble-firmware.bin differ diff --git a/dev/firmware_build/heltec-rtl_433-firmware.bin b/dev/firmware_build/heltec-rtl_433-firmware.bin index 37b08731..de15abb1 100644 Binary files a/dev/firmware_build/heltec-rtl_433-firmware.bin and b/dev/firmware_build/heltec-rtl_433-firmware.bin differ diff --git a/dev/firmware_build/heltec-rtl_433-fsk-firmware.bin b/dev/firmware_build/heltec-rtl_433-fsk-firmware.bin index bf4968a3..f0f9c834 100644 Binary files a/dev/firmware_build/heltec-rtl_433-fsk-firmware.bin and b/dev/firmware_build/heltec-rtl_433-fsk-firmware.bin differ diff --git a/dev/firmware_build/heltec-wifi-lora-32-firmware.bin b/dev/firmware_build/heltec-wifi-lora-32-firmware.bin index 88611dc3..53820210 100644 Binary files a/dev/firmware_build/heltec-wifi-lora-32-firmware.bin and b/dev/firmware_build/heltec-wifi-lora-32-firmware.bin differ diff --git a/dev/firmware_build/lilygo-ble-firmware.bin b/dev/firmware_build/lilygo-ble-firmware.bin index 60236196..71bba996 100644 Binary files a/dev/firmware_build/lilygo-ble-firmware.bin and b/dev/firmware_build/lilygo-ble-firmware.bin differ diff --git a/dev/firmware_build/lilygo-rtl_433-firmware.bin b/dev/firmware_build/lilygo-rtl_433-firmware.bin index 2825dd42..203cb6ad 100644 Binary files a/dev/firmware_build/lilygo-rtl_433-firmware.bin and b/dev/firmware_build/lilygo-rtl_433-firmware.bin differ diff --git a/dev/firmware_build/lilygo-rtl_433-fsk-firmware.bin b/dev/firmware_build/lilygo-rtl_433-fsk-firmware.bin index a860980c..e9b22b20 100644 Binary files a/dev/firmware_build/lilygo-rtl_433-fsk-firmware.bin and b/dev/firmware_build/lilygo-rtl_433-fsk-firmware.bin differ diff --git a/dev/firmware_build/lilygo-t3-s3-rtl_433-firmware.bin b/dev/firmware_build/lilygo-t3-s3-rtl_433-firmware.bin index b0150eea..67ecabcf 100644 Binary files a/dev/firmware_build/lilygo-t3-s3-rtl_433-firmware.bin and b/dev/firmware_build/lilygo-t3-s3-rtl_433-firmware.bin differ diff --git a/dev/firmware_build/lilygo-t3-s3-rtl_433-fsk-firmware.bin b/dev/firmware_build/lilygo-t3-s3-rtl_433-fsk-firmware.bin index f9971060..15edd71d 100644 Binary files a/dev/firmware_build/lilygo-t3-s3-rtl_433-fsk-firmware.bin and b/dev/firmware_build/lilygo-t3-s3-rtl_433-fsk-firmware.bin differ diff --git a/dev/firmware_build/shelly-plus1-firmware.bin b/dev/firmware_build/shelly-plus1-firmware.bin index 625a6f46..5abdf8fd 100644 Binary files a/dev/firmware_build/shelly-plus1-firmware.bin and b/dev/firmware_build/shelly-plus1-firmware.bin differ diff --git a/dev/firmware_build/theengs-bridge-firmware.bin b/dev/firmware_build/theengs-bridge-firmware.bin index e2a5f773..446a4d90 100644 Binary files a/dev/firmware_build/theengs-bridge-firmware.bin and b/dev/firmware_build/theengs-bridge-firmware.bin differ diff --git a/dev/firmware_build/theengs-bridge-v11-firmware.bin b/dev/firmware_build/theengs-bridge-v11-firmware.bin index d5794596..cd6bf74b 100644 Binary files a/dev/firmware_build/theengs-bridge-v11-firmware.bin and b/dev/firmware_build/theengs-bridge-v11-firmware.bin differ diff --git a/dev/firmware_build/theengs-plug-firmware.bin b/dev/firmware_build/theengs-plug-firmware.bin index 4e2587e2..2fcb426f 100644 Binary files a/dev/firmware_build/theengs-plug-firmware.bin and b/dev/firmware_build/theengs-plug-firmware.bin differ diff --git a/dev/firmware_build/thingpulse-espgateway-firmware.bin b/dev/firmware_build/thingpulse-espgateway-firmware.bin index afd22a89..f8523b79 100644 Binary files a/dev/firmware_build/thingpulse-espgateway-firmware.bin and b/dev/firmware_build/thingpulse-espgateway-firmware.bin differ diff --git a/dev/firmware_build/tinypico-ble-firmware.bin b/dev/firmware_build/tinypico-ble-firmware.bin index 79cf9e78..ab293f54 100644 Binary files a/dev/firmware_build/tinypico-ble-firmware.bin and b/dev/firmware_build/tinypico-ble-firmware.bin differ diff --git a/dev/firmware_build/ttgo-lora32-v1-firmware.bin b/dev/firmware_build/ttgo-lora32-v1-firmware.bin index d98efcaa..c89d05ce 100644 Binary files a/dev/firmware_build/ttgo-lora32-v1-firmware.bin and b/dev/firmware_build/ttgo-lora32-v1-firmware.bin differ diff --git a/dev/firmware_build/ttgo-lora32-v21-firmware.bin b/dev/firmware_build/ttgo-lora32-v21-firmware.bin index 03d01504..ec012700 100644 Binary files a/dev/firmware_build/ttgo-lora32-v21-firmware.bin and b/dev/firmware_build/ttgo-lora32-v21-firmware.bin differ diff --git a/dev/firmware_build/ttgo-t-beam-firmware.bin b/dev/firmware_build/ttgo-t-beam-firmware.bin index af364103..23ec0a6d 100644 Binary files a/dev/firmware_build/ttgo-t-beam-firmware.bin and b/dev/firmware_build/ttgo-t-beam-firmware.bin differ diff --git a/dev/index.html b/dev/index.html index 2125d27e..4631d79c 100644 --- a/dev/index.html +++ b/dev/index.html @@ -19,7 +19,7 @@ - + @@ -106,6 +106,6 @@ BLE to MQTT gateway can also run on Raspberry Pi, Windows or Unix computers than →

- + diff --git a/dev/integrate/aws_iot.html b/dev/integrate/aws_iot.html index 60970fc0..bc162758 100644 --- a/dev/integrate/aws_iot.html +++ b/dev/integrate/aws_iot.html @@ -19,7 +19,7 @@ - + @@ -126,6 +126,6 @@ →

- + diff --git a/dev/integrate/home_assistant.html b/dev/integrate/home_assistant.html index 094e4bc4..24790b44 100644 --- a/dev/integrate/home_assistant.html +++ b/dev/integrate/home_assistant.html @@ -19,7 +19,7 @@ - + @@ -312,6 +312,6 @@ mqtt: !include homed-mqtt.yaml →

- + diff --git a/dev/integrate/jeedom.html b/dev/integrate/jeedom.html index a3fb6afb..c36b76f4 100644 --- a/dev/integrate/jeedom.html +++ b/dev/integrate/jeedom.html @@ -19,7 +19,7 @@ - + @@ -112,6 +112,6 @@ Creation of "uptime", "freemem", "frestack" and &q →

- + diff --git a/dev/integrate/node_red.html b/dev/integrate/node_red.html index 7ff59ae5..723592bb 100644 --- a/dev/integrate/node_red.html +++ b/dev/integrate/node_red.html @@ -19,7 +19,7 @@ - + @@ -334,6 +334,6 @@ →

- + diff --git a/dev/integrate/openhab2.html b/dev/integrate/openhab2.html index c9ee9b99..4487eb34 100644 --- a/dev/integrate/openhab2.html +++ b/dev/integrate/openhab2.html @@ -19,7 +19,7 @@ - + @@ -143,6 +143,6 @@ end →

- + diff --git a/dev/integrate/openhab3.html b/dev/integrate/openhab3.html index da704f6c..82e9408e 100644 --- a/dev/integrate/openhab3.html +++ b/dev/integrate/openhab3.html @@ -19,7 +19,7 @@ - + @@ -109,6 +109,6 @@ After this tutorial, you should see your Bluetooth Low Energy devices in OpenHAB →

- + diff --git a/dev/participate/adding-protocols.html b/dev/participate/adding-protocols.html index 9a834b87..5f46bcdf 100644 --- a/dev/participate/adding-protocols.html +++ b/dev/participate/adding-protocols.html @@ -19,7 +19,7 @@ - + @@ -108,6 +108,6 @@ →

- + diff --git a/dev/participate/community.html b/dev/participate/community.html index 0c5d6768..bd7015c9 100644 --- a/dev/participate/community.html +++ b/dev/participate/community.html @@ -19,7 +19,7 @@ - + @@ -109,6 +109,6 @@ (opens new window)

- + diff --git a/dev/participate/development.html b/dev/participate/development.html index 4afe1d5d..c8eba7cc 100644 --- a/dev/participate/development.html +++ b/dev/participate/development.html @@ -19,7 +19,7 @@ - + @@ -133,6 +133,6 @@ They are generated from the development branch nightly or from a particular pull →

- + diff --git a/dev/participate/support.html b/dev/participate/support.html index 25f91634..013c7537 100644 --- a/dev/participate/support.html +++ b/dev/participate/support.html @@ -19,7 +19,7 @@ - + @@ -108,6 +108,6 @@ →

- + diff --git a/dev/prerequisites/M5.html b/dev/prerequisites/M5.html index 1fa97e36..6a2d8728 100644 --- a/dev/prerequisites/M5.html +++ b/dev/prerequisites/M5.html @@ -19,7 +19,7 @@ - + @@ -102,6 +102,6 @@ (opens new window)

# M5 Boards

M5 boards, manufactured by M5Stack (opens new window) are inexpensive, well featured boards based on ESP32.

# M5StickC and M5Stack

M5StickC and M5Stack are supported by OpenMQTTGateway and provide the following features:

# 3 low power modes

# Always ON display

The display is always ON but decrease its brightness when not processing.

# ON display when processing

The display is OFF when not processing and the ESP32 is put in low power mode.

# Always OFF display

The display is always OFF, if the board has a led, the led is used when processing.

To change the low power mode you can do it by MQTT or by pushing the middle button (btn B) of the M5Stack and the top button (btn B) of the M5Stick C

# Start screen

MStack core logo

# Sleep screen

The screen brightness is put to a minimum so as to reduce power consumption. M5Stack core brightness

# Log display in case of warning

If the gateway detects a warning or an error the sleep go out the sleep screen and show the message with a red (error) or orange (warning) background. M5 Stack core warning

The M5Stick support low power mode 2 but its display is not supported for the moment.

Last Updated: 12/7/2025, 10:45:07 PM
- + diff --git a/dev/prerequisites/board.html b/dev/prerequisites/board.html index e7bca780..6f03b1c3 100644 --- a/dev/prerequisites/board.html +++ b/dev/prerequisites/board.html @@ -19,7 +19,7 @@ - + @@ -111,6 +111,6 @@ To have a good overview of the compatibilities per board you can refer to the co →

- + diff --git a/dev/prerequisites/broker.html b/dev/prerequisites/broker.html index 54349cfa..471695da 100644 --- a/dev/prerequisites/broker.html +++ b/dev/prerequisites/broker.html @@ -19,7 +19,7 @@ - + @@ -110,6 +110,6 @@ Here is also some - + diff --git a/dev/prerequisites/controller.html b/dev/prerequisites/controller.html index c2b11032..b9967524 100644 --- a/dev/prerequisites/controller.html +++ b/dev/prerequisites/controller.html @@ -19,7 +19,7 @@ - + @@ -108,6 +108,6 @@

- + diff --git a/dev/prerequisites/devices.html b/dev/prerequisites/devices.html index 9045ecd3..acc8bead 100644 --- a/dev/prerequisites/devices.html +++ b/dev/prerequisites/devices.html @@ -19,7 +19,7 @@ - + @@ -110,6 +110,6 @@ Added to that it retrieves the measures from the devices mentioned and linked to →

- + diff --git a/dev/prerequisites/parts.html b/dev/prerequisites/parts.html index 81e13995..2caef242 100644 --- a/dev/prerequisites/parts.html +++ b/dev/prerequisites/parts.html @@ -19,7 +19,7 @@ - + @@ -108,6 +108,6 @@ →

- + diff --git a/dev/setitup/actuators.html b/dev/setitup/actuators.html index 0abe8c74..50c492ed 100644 --- a/dev/setitup/actuators.html +++ b/dev/setitup/actuators.html @@ -19,7 +19,7 @@ - + @@ -112,6 +112,6 @@ The wiring of the hardware is described in the RF gateway.

< →

- + diff --git a/dev/setitup/ble.html b/dev/setitup/ble.html index 51d2a7c1..f826c00a 100644 --- a/dev/setitup/ble.html +++ b/dev/setitup/ble.html @@ -19,7 +19,7 @@ - + @@ -108,6 +108,6 @@ →

- + diff --git a/dev/setitup/gsm.html b/dev/setitup/gsm.html index 17389dce..b23bd56e 100644 --- a/dev/setitup/gsm.html +++ b/dev/setitup/gsm.html @@ -19,7 +19,7 @@ - + @@ -108,6 +108,6 @@ →

- + diff --git a/dev/setitup/ir.html b/dev/setitup/ir.html index 0ac28045..6a1c0e50 100644 --- a/dev/setitup/ir.html +++ b/dev/setitup/ir.html @@ -19,7 +19,7 @@ - + @@ -108,6 +108,6 @@ →

- + diff --git a/dev/setitup/lora.html b/dev/setitup/lora.html index fde63351..1d231566 100644 --- a/dev/setitup/lora.html +++ b/dev/setitup/lora.html @@ -19,7 +19,7 @@ - + @@ -109,6 +109,6 @@ Ideally a TTGO board with LoRa module included see - + diff --git a/dev/setitup/rf.html b/dev/setitup/rf.html index af545ed3..28abe0ad 100644 --- a/dev/setitup/rf.html +++ b/dev/setitup/rf.html @@ -19,7 +19,7 @@ - + @@ -110,6 +110,6 @@ The RF processing can be achieved after the modification by either RF, RF2 or Pi

- + diff --git a/dev/setitup/sensors.html b/dev/setitup/sensors.html index 01104b5f..067ab519 100644 --- a/dev/setitup/sensors.html +++ b/dev/setitup/sensors.html @@ -19,7 +19,7 @@ - + @@ -109,6 +109,6 @@ Ground pins of the board and the Module to the ground of the supply source.

< →

- + diff --git a/dev/setitup/serial.html b/dev/setitup/serial.html index 17eae634..5de57d44 100644 --- a/dev/setitup/serial.html +++ b/dev/setitup/serial.html @@ -19,7 +19,7 @@ - + @@ -108,6 +108,6 @@ →

- + diff --git a/dev/sitemap.xml b/dev/sitemap.xml index 08c74cf3..ffb1e34a 100644 --- a/dev/sitemap.xml +++ b/dev/sitemap.xml @@ -1 +1 @@ -https://decoder.theengs.io/devices/devices.htmlhttps://community.openmqttgateway.com/https://shop.theengs.io/https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumptionhttps://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antennahttps://app.theengs.io/https://gateway.theengs.io/https://decoder.theengs.io/https://parser.theengs.io/https://www.theengs.io/https://docs.openmqttgateway.com/dev/2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/aws_iot.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/home_assistant.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/jeedom.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/node_red.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/openhab2.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/openhab3.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/community.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/adding-protocols.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/support.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/M5.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/development.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/board.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/broker.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/controller.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/devices.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/parts.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/actuators.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/ble.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/gsm.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/ir.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/lora.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/rf.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/sensors.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/serial.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/binaries.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/advanced-configuration.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/builds.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/gitpod.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/portal.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/troubleshoot.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/web-install.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/actuators.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/ble.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/displays.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/gateway.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/lora.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/boards.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/ir.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/rfm69.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/rf.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/gsm.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/serial.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/sensors.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/webui.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/404.htmldailyhttps://decoder.theengs.io/devices/devices.htmlhttps://community.openmqttgateway.com/https://shop.theengs.io/https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumptionhttps://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antennahttps://app.theengs.io/https://gateway.theengs.io/https://decoder.theengs.io/https://parser.theengs.io/https://www.theengs.io/ \ No newline at end of file +https://decoder.theengs.io/devices/devices.htmlhttps://community.openmqttgateway.com/https://shop.theengs.io/https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumptionhttps://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antennahttps://app.theengs.io/https://gateway.theengs.io/https://decoder.theengs.io/https://parser.theengs.io/https://www.theengs.io/https://docs.openmqttgateway.com/dev/2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/home_assistant.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/aws_iot.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/jeedom.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/openhab2.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/adding-protocols.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/openhab3.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/node_red.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/community.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/development.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/M5.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/support.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/board.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/broker.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/controller.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/devices.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/parts.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/actuators.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/ble.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/gsm.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/ir.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/lora.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/rf.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/sensors.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/serial.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/advanced-configuration.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/binaries.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/builds.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/gitpod.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/troubleshoot.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/portal.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/web-install.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/actuators.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/boards.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/ble.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/displays.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/gateway.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/gsm.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/ir.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/rf.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/lora.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/rfm69.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/serial.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/webui.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/use/sensors.html2025-12-07T22:45:07.000Zdailyhttps://docs.openmqttgateway.com/dev/404.htmldailyhttps://decoder.theengs.io/devices/devices.htmlhttps://community.openmqttgateway.com/https://shop.theengs.io/https://shop.theengs.io/products/theengs-plug-smart-plug-ble-gateway-and-energy-consumptionhttps://shop.theengs.io/products/theengs-bridge-esp32-ble-mqtt-gateway-with-ethernet-and-external-antennahttps://app.theengs.io/https://gateway.theengs.io/https://decoder.theengs.io/https://parser.theengs.io/https://www.theengs.io/ \ No newline at end of file diff --git a/dev/upload/advanced-configuration.html b/dev/upload/advanced-configuration.html index b9cf926d..f0913b1e 100644 --- a/dev/upload/advanced-configuration.html +++ b/dev/upload/advanced-configuration.html @@ -19,7 +19,7 @@ - + @@ -130,6 +130,6 @@ So as to activate this function you need to set valueAsATopic to tr →

- + diff --git a/dev/upload/binaries.html b/dev/upload/binaries.html index 2753ede4..5a95a84f 100644 --- a/dev/upload/binaries.html +++ b/dev/upload/binaries.html @@ -19,7 +19,7 @@ - + @@ -151,6 +151,6 @@ The upload details appears.

With an ESP if you did not set your net →

- + diff --git a/dev/upload/builds.html b/dev/upload/builds.html index 7f6e1f48..7cf6831d 100644 --- a/dev/upload/builds.html +++ b/dev/upload/builds.html @@ -19,7 +19,7 @@ - + @@ -237,6 +237,6 @@ Added to that auto discovery box should be selected into your Home Assistant MQT →

- + diff --git a/dev/upload/gitpod.html b/dev/upload/gitpod.html index 4a7ee1a3..9c61cf37 100644 --- a/dev/upload/gitpod.html +++ b/dev/upload/gitpod.html @@ -19,7 +19,7 @@ - + @@ -111,6 +111,6 @@ →

- + diff --git a/dev/upload/portal.html b/dev/upload/portal.html index 58087083..23c46008 100644 --- a/dev/upload/portal.html +++ b/dev/upload/portal.html @@ -19,7 +19,7 @@ - + @@ -132,6 +132,6 @@ If the board is connected by ethernet, the Wifi and password can be empty. If yo →

- + diff --git a/dev/upload/troubleshoot.html b/dev/upload/troubleshoot.html index 07b52980..9462f578 100644 --- a/dev/upload/troubleshoot.html +++ b/dev/upload/troubleshoot.html @@ -19,7 +19,7 @@ - + @@ -124,6 +124,6 @@ If you set the ntp server for the gateway and keep getting the errors you should →

- + diff --git a/dev/upload/web-install.html b/dev/upload/web-install.html index 14b389e7..a6d35460 100644 --- a/dev/upload/web-install.html +++ b/dev/upload/web-install.html @@ -19,7 +19,7 @@ - + @@ -294,6 +294,6 @@ The correct driver to then select in the popup of this web install is →

- + diff --git a/dev/use/actuators.html b/dev/use/actuators.html index e3ed202a..f3070000 100644 --- a/dev/use/actuators.html +++ b/dev/use/actuators.html @@ -19,7 +19,7 @@ - + @@ -145,6 +145,6 @@ The json message must contain two properties:

  • remote: the index of t →

    - + diff --git a/dev/use/ble.html b/dev/use/ble.html index d9e6cea8..d779005b 100644 --- a/dev/use/ble.html +++ b/dev/use/ble.html @@ -19,7 +19,7 @@ - + @@ -246,6 +246,6 @@ By default the gateway scans the advertizing BLE devices nearby with their MAC a →

    - + diff --git a/dev/use/boards.html b/dev/use/boards.html index b87ec0c6..7678ef42 100644 --- a/dev/use/boards.html +++ b/dev/use/boards.html @@ -19,7 +19,7 @@ - + @@ -109,6 +109,6 @@ If you are publishing the state change while the device is asleep use the retain →

    - + diff --git a/dev/use/displays.html b/dev/use/displays.html index 3f6aa339..a908487a 100644 --- a/dev/use/displays.html +++ b/dev/use/displays.html @@ -19,7 +19,7 @@ - + @@ -131,6 +131,6 @@ This example describes how to do it with the ESP32 board.

    • Connect th →

      - + diff --git a/dev/use/gateway.html b/dev/use/gateway.html index 52a3b470..cd3343a7 100644 --- a/dev/use/gateway.html +++ b/dev/use/gateway.html @@ -19,7 +19,7 @@ - + @@ -228,6 +228,6 @@ Meaning: Indicates the state of a connected actuator

      - + diff --git a/dev/use/gsm.html b/dev/use/gsm.html index f35c1d16..9d890d04 100644 --- a/dev/use/gsm.html +++ b/dev/use/gsm.html @@ -19,7 +19,7 @@ - + @@ -110,6 +110,6 @@ →

      - + diff --git a/dev/use/ir.html b/dev/use/ir.html index b8345028..6544f4ea 100644 --- a/dev/use/ir.html +++ b/dev/use/ir.html @@ -19,7 +19,7 @@ - + @@ -130,6 +130,6 @@ In User_config.h replace:

      - + diff --git a/dev/use/lora.html b/dev/use/lora.html index 3e178d16..8e1012fd 100644 --- a/dev/use/lora.html +++ b/dev/use/lora.html @@ -19,7 +19,7 @@ - + @@ -119,6 +119,6 @@ will send "test" to a WiPhone with chip ID 123ABC

    More in →

    - + diff --git a/dev/use/rf.html b/dev/use/rf.html index 3223a179..415a55c3 100644 --- a/dev/use/rf.html +++ b/dev/use/rf.html @@ -19,7 +19,7 @@ - + @@ -159,6 +159,6 @@ Transmitting can be done with both ZgatewayRF and ZgatewayRF2

    - + diff --git a/dev/use/rfm69.html b/dev/use/rfm69.html index 0a2e1281..0ecbe49b 100644 --- a/dev/use/rfm69.html +++ b/dev/use/rfm69.html @@ -19,7 +19,7 @@ - + @@ -114,6 +114,6 @@ In this case the gateway will publish the sent message to the topic defined by s →

    - + diff --git a/dev/use/sensors.html b/dev/use/sensors.html index b40516ae..6222d2c5 100644 --- a/dev/use/sensors.html +++ b/dev/use/sensors.html @@ -19,7 +19,7 @@ - + @@ -113,6 +113,6 @@ One reading is done every 0.5s.

    home/OpenMQTTGateway/RN8209toMQTT { →

    - + diff --git a/dev/use/serial.html b/dev/use/serial.html index c7049d2e..100d21e2 100644 --- a/dev/use/serial.html +++ b/dev/use/serial.html @@ -19,7 +19,7 @@ - + @@ -118,6 +118,6 @@ home/OpenMQTTGateway/SERIALtoMQTT/humidity/sens2 60< →

    - + diff --git a/dev/use/webui.html b/dev/use/webui.html index 518271d2..07581b54 100644 --- a/dev/use/webui.html +++ b/dev/use/webui.html @@ -19,7 +19,7 @@ - + @@ -108,6 +108,6 @@ →

    - +