diff --git a/dev/404.html b/dev/404.html index 744d148f97..26f7e3fb74 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/16.bcd0ee76.js b/dev/assets/js/16.3ec27c9e.js similarity index 98% rename from dev/assets/js/16.bcd0ee76.js rename to dev/assets/js/16.3ec27c9e.js index 010504e624..5d6607c0c6 100644 --- a/dev/assets/js/16.bcd0ee76.js +++ b/dev/assets/js/16.3ec27c9e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{343:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration.b72f91ee.png"},344:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-debug.800b0d32.png"},345:function(s,t){s.exports="data:image/png;base64,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"},346:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-debug3.6d8b4ff8.png"},347:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-process.f39abb66.png"},348:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-gauge.083998e2.png"},349:function(s,t){s.exports="data:image/png;base64,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"},350:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-chart.3d64e14e.png"},351:function(s,t){s.exports="data:image/png;base64,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"},352:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-flow-BLE-temperature.aa7f950d.png"},424: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(343),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(344),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(345),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(346),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(347),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(348),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(349),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(350),alt:"NodeRed integration"}})]),s._v(" "),t("p",[t("img",{attrs:{src:a(351),alt:"NodeRed integration"}})]),s._v(" "),t("p",[s._v("Or a function with a notification:")]),s._v(" "),t("p",[t("img",{attrs:{src:a(352),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([[16],{344:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration.b72f91ee.png"},345:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-debug.800b0d32.png"},346:function(s,t){s.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZoAAACDCAYAAAC0qN2EAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASdEVYdFNvZnR3YXJlAEdyZWVuc2hvdF5VCAUAABcESURBVHhe7Z3dbxRHvob5n/xXrPY6kVa520iR9movsjeREu3uRXR8son2bIAlBONg42DAxjhxWIN9CBBkvgQcHHACJBAOCaz5SPgmCQdRp96a6XF1TfW4p9+e9oz9PtJP4P54puer3qnqmp51JsJPP/1U/185yMchH4d8HPJxyGeMgsYiH4d8HPJxyMdRhU9BY5GPQz4O+Tjk46jCp6CxyMchH4d8HPJxVOFT0Fjk45CPQz4O+Tiq8CloLPJxyMchH4d8HFX4FDQW+Tjk45CPQz6OKnwKGot8HPJxyMchH0cVPgWNRT4O+Tjk45CPowqfgsYiH4d8HPJxyMdRhU9BY5GPQz4O+Tjk46jCp6CxyMchH4d8HPJxVOFT0Fjk45CPQz4O+Tiq8CloLPJxyMchH4d8HFX4FDQW+Tjk45CPQz6OKnwKGot8HPJxyMchH0cVPgWNRT4O+Tjk45CPowqfgsYiH4d8HPJxyMdRhU9BY5GPQz4O+Tjk46jCtw4LVSqVSqXqVKlHY5GPQz4O+Tjk46jCp6CxyMchH4d8HPJxVOFT0Fjk45CPQz4O+Tiq8CloLPJxyMchH4d8HFX4cgXNtWvXzNmzZ83p06cL1dGjR6PLi5Z8XHWbD68tvMYS9MbkkI9DPo6YLzNoHj58aBYWFszg1kEzPDhsJrZPmMntkx2vA+MHVGuspsenzdjomNnx8Q4XOHpjcsjHIR9HzJcZNAiZjRs2mtmxWXNm35lK6uj4UffvxUMXVWuw5j6bM1sHtrrXXpnojc4hH4d8LYIGPZmiIXNu5lx0+XKloFEhbEa2j9RfieWgNzqHfBzyZQQNPlFiuCwMgjx15fQV8+vTX835z89H17cqBY0KtXvH7tQ5Gxa90Tnk45AvI2jm5ubcOZkwCPLU5ROXnePe4r3o+laloFGhpsem3QSBstAbnUM+DvkyggaziHBiPgyCvHXru1vOg9CJrc8qBY0KhQkCmI1WFnqjc8jHIV+HggbnaJ7/33Nzf/F+dH1WKWhUKAUNh3wc8nHEfKUFDc7N3P3+buNv/B+0c65GQaNCKWg45OOQjyPmKy1owmD56uhX7u+bl282bZtVChoVSkHDIR+HfBwxX2lBg4ABfq+m3eEzBc3ardP7T5vZPbMuZHZt32WmpqZc2Jw7d87cuXPHvbaKojc6h3wc8pV8jibs1Tz68ZF5/ux503ZZVSxopsxbfX2mr+9V88FkbH2tpl7HNn3m1XdONK078c6rbl26At/gW5Ft+sxbg942mdu+ZabCbVCTH5hXU9uF9yG5b0G9PuVtU6vk/qWr+Xbj97VeDW/G7bpq/TgXKQQMvrf1r33/MgcOHEjV9PS02bZtmwucouiNziEfh3wlBA2GyL5f+N79P5nanAyX4V+Q9zxNkaBxDecrr7oGO9roo1yDbrd5xTaUWY10sNwte+UDc6L+d+12lv5uLAsa81qDn14W2662LBZm3rL6cYcNe3hsFw+dMB/Y+9YUoqHPVuy+NlXG7Xai0JNByMzPz5tLly5FC+sQNkV7Nnqjc8jHIV8JQYOhMfRakjAB6Mng/0nQ5J3m3HbQ1HsEbw1mNLSuauvQuMbCIvn03hRSaKQb22b43e0vBUgsUGoV7B8JgKRSQeC2i/nCY864D7bSwZK9nV/xx6kzhd4MejKxgPELPZuivRq90Tnk45CvhKDBbDOAf/E3QgZXBvDXdSpo/E/2mZ/U/UY91nBHP72HwRJvoIs04pmhFansBj9wtOiBpBw5eyqZj2UHCudkMEQWCxe/sM2RI0fMvXv3zOPHj82vv/5qXrx44V5fy6E3Ood8HPLZoMHCsNoJmmQSQDJclnxZE/9PhtI6EjRBoxlvlHM0yC58bMMaVCow3H7N26TCwm0T632EhUBavrFvHUjpda16IKl1GfcVtXQ7NXdsm3jviqt2gmbz5s1NNTQ0ZMbHx12P54svvnATCL7++mtz/fp18+OPP5onT56YR48emQcPHpj79+83vdZVKlXni+7RhEHjD5d1LmjqjaH/qTvSW3GNbGpZc68j/uk9X0Oe2he3n9HYp6qtQMrqIdWOL1nXqgfijr2+LldPJRbGHSw2aJYrnNvBvhcvXnRBUwZ445SJfBzycVThK33oLJl55q8rPWgyP5n7DWStoY5tF356j/UacjXQfrhEgi61XbKuVUPur1t2u+S2su9DOpBabedVq/vRgWonaEZHR83evXvN2NiY2bFjhxkeHjZbt26NBkxWYV9cy+/bb791PZ0iqOHgkI+jF3100CBY8H2Z5KcBcI7m6YOn7v+dmQyQ1WCmewC5eiEteg1L2y0TRsltZAZDuH+e27R/t2jwsV0eXyoIW23nVdbj1qkqazIAhsm++eYbc/LkSbN//34XRLGgCevgwYNtXylaDQeHfBy96KODBgFzbf5a42+QfEkzCZoypze7hjDaAHsNumv0441qnnCo3UayPKOBdkGQXu6CIjg2tyxouNN+f9nSvqnj9KrJlxVw7vi85ZlBmK5U2FVQnZzejPMzP/zwgzlz5ow7f4PeUCxsUJOTk+b8+fPm559/ru+djRoODvk4etFHB41fCByQfK/GfWHT9nbC7bJq2aCpB0isd4GqNZKjLnAyP5V7PYVa4263bSqvQa4HSqwyg8zbJutYm7ypxr0Wmqn19QpvM/M+BGGRfV9Ryf2thWp8G1sdCqBOf2ETEwESFhcXzalTp9wEgljgbN++3Rw7dszcvVsbAo6hhoNDPo5e9JUWNO6Kzc+eN6Y2o3QJGlXeWolL0Ny4ccMcP37c7Nq1qylwBgcHM8NNDQeHfBy96CstaJJhsmRSgC6qqSpaCJuqL6qJ6dCHDx9uChwEHgLJRw0Hh3wcvegrLWhwwt/vvYTXPctTChoVaiWCJuHq1atmYmKiKXBOnDhhnj175rZRw8EhH0cv+ko9R5NUMozWzrAZSkGjQq1k0IDnz5+72x8YGEiFDc7rwOWf8ymDXmw4GOTj6EVfR4JGP+WsYmqlgybh9u3bZmZmJhU2u3fvNjdv1oaJy0INEYd8HFX4okGDL7RNbJ9oCoI8hXAB7fZmUAoaFWp6bNqcPXvWvY7KgH0j4aoCftjs3Lmz1DdnLzYcDPJx9KIvGjQLCwtmeHC4KQjyFIIGM8/aOTeTlIJGhdq9Y3fbX6JsRRlvpCtXrqTCBj2bst6gvdhwMMjH0Yu+aNBgQ3yvYXZstikM8lRylYB2S0GjmvtszoxsH6m/EsuhrDdSp8Kmijc6g3wc8rUIGvRqNm7YWDhsipSCZm0XQmbrwFb32iuTMt9IYdjgcjcsvdhwMMjH0Yu+zKB5+PChe8OjZ4NhNJyzwQSBThdOBKvWVk2PT5ux0TGz4+Mdbsis299IX331VSpsmKsWgG6/v/JxyNciaHzw5sfJWcwEKlKYxRZbXrTk46rbfHht+edkuv2NhKs+45iToME06Fu3ajMti9Dt91c+DvlyBg2LfBzycZTtw698AlyHLQmbffv2uWVF0PPBIR9HFT4qaK7eWzSTF0+Y3ReONhWWYz3QA80hH0enfLjwJn7hMwkbXCW6CHo+OOTjqMJXOGgQJC/t7l+2sJ0eaA75ODrpw3nMJGhQRb7MqeeDQz6OKnzrsLDdmv/fy9FQySpsH/N0ZV2aMhv7h82x2LoWdfmzjaZ/45S5HFmnWp2FIbTHjx+b2dnZRtB8+umnbllse5VqrVahHk3e3kxSo2cP1fcsh+WOr11Svn/PmE39o2a+/mdeFmc3mf5NMwaDhR09vhKQjyP04dc9/Z+Uxg+1tYOeDw75OKrwFQoanIOJBUpWDZ2ere/pM29G+/tNvyuvYXcNfWT5uVHbkI+a0U3Juk1m5t9YsWhm7LLRnXZ9st9O742e5QP+OhcSkWNqtT+OyS3fZG9fQVMWvejD1Z2ToBkZGcn1S50Jevw45OOowrdCQVMPh/rXD1xvwIVDraHfNFubRDC/0zbi9cY7adSxz08/XXb71/apudLbJSFU8yW3k/K5dbXtcH+xzt1uqkfTYv96ANXWpY+hF18IDPIZN1yGX+dMwqad79bo8eOQj6MK38oETaox9wiXu7/roeECpLYOx7cUTrVGPgknP0D8fRy+H+tiwRBuk2N/R5avBOTjqMqH7wQlQYPL0+DnBvKgx49DPo4qfCsTNGEDntC0PAgNryEPgybpdTQHje1ppKq2LvOcSlPQLL+/Izi+MpGPoyrfkydPUr0aXEEgD3r8OOTjqMLXWz2aIkHjh4FPVjC06rX4hOuyfCUgH0eVPr9X88knn9SXtkaPH4d8HFX4CgUNP+ssfe5jqXdQW555jsZryHMFTex2khDxQgw+d1vwpcKuxf6pdTpHUya97MM1Av0ZaNevX6+vyUaPH4d8HFX4CgUNvvEfC5SswvdomnANejIcFfZiIssLBY0l5fOWAziTdUmg1QMkHUjL7z86a7dT0JRCr/s+//zzRtAcOrT81H49fhzycVThKxQ0QFcGyEY+jl73fffdd42g2bJlS+PaaFno8eOQj6MKX+GgAbrWWRz5OFaDb2xsrBE2OG/TCj1+HPJxVOGjgiYv8nHIx7ESPn9SAEKnFXr8OOTjqMKnoLHIxyFfMxguw7BZEjYYTstCjx+HfBxV+BQ0Fvk45IuDiQBJ0GCCQBZ6/Djk46jCp6CxyMchXxxMbU6CBlOeMfU5hh4/Dvk4qvApaCzycciXDb60mYRN1qQAPX4c8nFU4VPQWOTjkC8bXIYmCRpcngaXqQnR48chH0cVPgWNRT4O+bLBhTVxgc1WvRo9fhzycVThU9BY5OOQrzX4yQC/V4OfFPDR48chH0cVPgWNRT4O+VqDH0HDj6ElYYMfSfPR48chH0cVvnVYqFKpOlcPHjxIfYFzYGDA3Lhxwy2Pba9SrbZSj8YiH4d8+di3b18jbPyLberx45CPowqfgsYiH4d8+bh582YjaFALCwtuuR4/Dvk4qvApaCzycciXnzNnzjSCZmhoyNy9e9cNoZWJng8O+ThiPgWNRT4O+drDH0Kbnp5umoXGoueDQz6OmE9BY5GPQ772uHXrlpsQkITNyZMn62vKodP399q1a+bs2bNugkOROnr0aHR50VrtPjzWeMwTevH9oaCxyMchX/v4361BXblypb6Gp1P3F43d8MiQGRjeYt4f+rv5r6F313z95+a3O15/29xvNny43nw4UDuvl+fnwduhiveHgsYiH4d8xdi/f39HwqYT9xchs2Vgi3l3pN/8x66/qGz9Zdsb5o0PXnf/VlFvD/zVvL/+H2bPnj3Rnk/RSnpcYc+pKLHXn4LGIh+HfMWAx788TVlh04n7i56MQiZdaPyrDBoUwmbDPze4cCi7jhw5YiYnJ83o6CgVOLHXn4LGIh+HfMWBa+fOnaWGTdn3F8M1GC6LNbZrudDwVx00qPWb33fPCZ7nTtSFCxfM4OBg4bCBI0RBY5GPQz4OfL8m7NlcvHixvrZ9yj6+ubk5d04m1tiu5UKjvxJBg3M2eE7wPHeqEDbo2RQB+4coaCzyccjHkVyKJgybmZkZc/v27fpW+Sn7+DCsghPfscZ2LRca/ZUIGkwQwHOC5zlW+JBy7Nix1LBYrLANto05UBhGK9Krwb4hChqLfBzycSQ+/Ds+Pp4KG0yDxola/NxAXso+PjRKCprmQqOfN2gOn/tvc+h/lq/YvmFlBQ0+lOyZGDcD2/LNCsQ22Bb7YN/Qh3M2mCDQLtg3REFjkY9DPg7f9+zZM3d1Zz9sUBMTE+bq1av1rVpT9vEpaOKFRj9v0OQltm9YWUGDwCgyxIl9sG/ow23gQ067YN8QBY1FPg75OGI+XN15amqqKXAOHz687Pcoyj4+BU280Oh3y9AZhsDQO4kdZ57CvuEwmoJGPgr5OKr04YudmAEUBs6uXbvM8ePHXSCFlHF8d+7ccbeNhga9qQ1b17uw+fvwu+adHW9HG6u1Vmj0uyVocL6FmbCBfeHwnQoa+Sjk46jahwtvohHAr3OGgYPCeZ1Tp06ZxcVFt/2jR4/cv0VBwGzbts1dh+3AgQOp+mzfZ2Zg6xYXOLEGq0j96Q99pq8vrJfNnyLbtip4fvdefF0nCo1+t5yjwd9MrxP7xpwKmhKRj0M+jrw+/FLn+fPn3WygWOCg9u7daw4ePGjm5+fdEFu7F+xETwYhg/0vXboULaxD2JTTs3nDvPZSn/ntm2+kl7/3sg2b35jXBrxlLQuedrbnC41+t5yjUdBY5OOQj2M1+jDtFIESC5uwPv74Y3fFaAy1ISjQQ8oCvRn0ZMJwCQs9m3J6NX80v7M9mFhPxPV0/vDHpWUufJIeTxgq8LxsXnvzN41tfOef7fJ0mIW3W/t7qTeFv1sHFxr9bhk6U9BY5OOQj2M1+zBMdvnyZTcVNbzCwHKFcz/Dw8Pui3kYfksuP4Ihsli4+IVtmIatUQO/N7/NaNARDn0v/d78Ofm/P5zmQif8e6lnFG7fNKzmbjdZXwuZRhDBZXtHS+vjhUZfQdMM9g1Z54tVKlVv1f37990XPhE4GCbDVQbw3Qf0Sj766KNowCxXVQaNHybZ68LeByq9zG3r935SPZLIsJoLEy/EUsdQG87LOq6k0Oiv9nM04bKipR6NRT4O+TjK9vm/2Pn06VP3ZTx8B+fLL790kwpwxQHMJENvZqWDpml4zKtGeKSGzNKVBE3zRAAviNB7CUJj6Xbj54haHVdSaPR1jqYZ7BuioLHIxyEfx0r6Xrx4YX755RfXI8J+GIKrLmgyJgJ46xAUrXo9tUKoBMNc/pAcgioVGv7txnpLrY5rqdDoa+isGewboqCxyMchH0c3+aqdDBBr5OvVcmgrqNT5llr5++D/qdBInReKHENqfXah0VfQNIN9QxQ0Fvk45OPoJl+l05uzGnQ3VOYtd9v5YVDrcTR6KfWhtcb6wIthsEbQ1F3hRIGlIKu7l5kIgEKjv9rP0ShoSkQ+Dvk4us1X1Rc2Xa/DNfpBxc6NBOdp/B4KPL97LwkIVBBejXCxhUDxeku1bYJ93wzXxwuNvs7RNIN9QxQ0Fvk45OPoRt9avgRNnokAKDT63TJ0pkvQWOTjkI9DPg7203JXl+specNkWcN5kUKj3y1Bo4tqWuTjkI9DPo5VHTS2XA8mGVqzFZ2cECk0+t1yjgalnwmQj0I+Dvk4VnvQFC00+t1yjgalHz6Tj0I+Dvk4FDTxQqPfLUNnfmEIDOdbsE2rwjbhcJlf+iln+Sjk41hrvrm5uUJDMqu90OivRND8bXO/e07wPHeqLly44K57VwTsH6KgscjHIR9Ht/sWFhbMwHDxE82rtdDor0TQrN/8vntO8Dx3ohAyuOBqkd4MgCNEQWORj0M+jl7wDY8MmXdH+qMN7lotNPpVB83bA381G/65IToUxhbOySRX8C4aMiD2+lPQWOTjkI+jF3xoeLYMbFHYeIWGv8qgQci8v/4fZs+ePW42WFmFkMG/OPHPBExC7PWnoLHIxyEfR6/40AihZ4NhtDyzmtZC4cR8pwvnZDZ8uN58OLDZDZnhl1PLpIrXn4LGIh+HfBy95kPg4NNv+Mk4byWfoMuq1e4Lexq9+PpT0Fjk45CPQz4O+Tiq8CloLPJxyMchH4d8HFX4FDQW+Tjk45CPQz6OKnzrsFClUqlUqk6VejQW+Tjk45CPQz6OKnwKGot8HPJxyMchH0cVPgWNRT4O+Tjk45CPowqfgsYiH4d8HPJxyMdRhU9BY5GPQz4O+Tjk46jCp6CxyMchH4d8HPJxVOFT0Fjk45CPQz4O+Tiq8CloLPJxyMchH4d8HFX4FDQW+Tjk45CPQz6OKnwKGot8HPJxyMchH0cVPgWNRT4O+Tjk45CPo/M+Y/4fO8kNqzifPYQAAAAASUVORK5CYII="},347:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-debug3.6d8b4ff8.png"},348:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-integration-process.f39abb66.png"},349:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-gauge.083998e2.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-chart.3d64e14e.png"},352:function(s,t){s.exports="data:image/png;base64,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"},353:function(s,t,a){s.exports=a.p+"assets/img/OpenMQTTgateway_NODERED-flow-BLE-temperature.aa7f950d.png"},425: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(344),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(345),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(346),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(347),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(348),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(349),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(350),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(351),alt:"NodeRed integration"}})]),s._v(" "),t("p",[t("img",{attrs:{src:a(352),alt:"NodeRed integration"}})]),s._v(" "),t("p",[s._v("Or a function with a notification:")]),s._v(" "),t("p",[t("img",{attrs:{src:a(353),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/24.c676c9bd.js b/dev/assets/js/24.e58e4886.js similarity index 87% rename from dev/assets/js/24.c676c9bd.js rename to dev/assets/js/24.e58e4886.js index 934186ac8f..4966187408 100644 --- a/dev/assets/js/24.c676c9bd.js +++ b/dev/assets/js/24.e58e4886.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{370:function(e,t,r){e.exports=r.p+"assets/img/OpenMQTTGateway_devices_rf1.97b46f9c.png"},371:function(e,t,r){e.exports=r.p+"assets/img/OpenMQTTGateway_devices_rf2.26da8a3a.png"},372:function(e,t,r){e.exports=r.p+"assets/img/OpenMQTTGateway_devices_rf3.85e5cb30.png"},373:function(e,t,r){e.exports=r.p+"assets/img/OpenMQTTGateway_devices_ble.eccdbc5d.png"},434:function(e,t,r){"use strict";r.r(t);var a=r(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:"devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#devices"}},[e._v("#")]),e._v(" Devices")]),e._v(" "),t("p",[e._v("You can take a look to the "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenMQTTGateway compatible website"),t("OutboundLink")],1),e._v(" to have a view of the "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/devices/",target:"_blank",rel:"noopener noreferrer"}},[e._v("supported devices"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Added to that is an overview of devices supported by OpenMQTTGateway:")]),e._v(" "),t("h2",{attrs:{id:"for-radio-frequency-devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#for-radio-frequency-devices"}},[e._v("#")]),e._v(" For radio frequency devices")]),e._v(" "),t("p",[e._v("OpenMQTTGateway can support a wide range of 433mhz/315mhz devices, all the ones with SC5262 / SC5272, HX2262 / HX2272, PT2262 / PT2272, EV1527, RT1527, FP1527, HS1527 chipsets are supported by the RF gateway. Added to that RF2 support Kaku and Pilight an "),t("a",{attrs:{href:"https://wiki.pilight.org/devices",target:"_blank",rel:"noopener noreferrer"}},[e._v("huge list"),t("OutboundLink")],1),e._v(".\nNote that for the moment RF, RF2 and Pilight can not be activated on the same boards together.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(370),alt:"boards",title:":size=250%"}}),e._v(" "),t("img",{attrs:{src:r(371),alt:"boards",title:":size=250%"}}),e._v(" "),t("img",{attrs:{src:r(372),alt:"boards",title:":size=250%"}})]),e._v(" "),t("h2",{attrs:{id:"for-ble-devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#for-ble-devices"}},[e._v("#")]),e._v(" For BLE devices")]),e._v(" "),t("p",[e._v("OpenMQTTGateway is able to scan all the BLE devices that advertise their data so as to do presence detection.\nAdded to that it retrieves the measures from the devices mentioned and linked to below. By default the data are read from the advertisements (no or very little impact on device battery life). For some devices we may connect briefly only to retrieve one or several parameters.")]),e._v(" "),t("p",[e._v("OpenMQTTGateway currently supports the decoding of "),t("a",{attrs:{href:"https://decoder.theengs.io/devices/devices.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("more than 100 Bluetooth devices"),t("OutboundLink")],1),e._v(", which include popular devices like Mi Flora, Xiaomi scales, Inkbird, Govee and ThermoPro thermo-hygrometers and BBQ thermometers, SwitchBot devices status and many more.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("ul",[t("li",[e._v("(2) See https://github.com/atc1441/ATC_MiThermometer")]),e._v(" "),t("li",[e._v("(3) See https://github.com/pvvx/ATC_MiThermometer")])])]),e._v(" "),t("p",[t("img",{attrs:{src:r(373),alt:"devices",title:":size=250%"}})]),e._v(" "),t("h2",{attrs:{id:"for-infrared-ir-devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#for-infrared-ir-devices"}},[e._v("#")]),e._v(" For infrared IR devices")]),e._v(" "),t("p",[e._v("The list of supported devices for ESP is "),t("a",{attrs:{href:"https://github.com/crankyoldgit/IRremoteESP8266/blob/master/SupportedProtocols.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(", and "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/6f73160d1421bebf2c1bbc9b8017978ff5b16520/main/config_IR.h#L123",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(" for Arduino boards, as there is also the possibility of using raw and global cache (ESP) sending possibilities of this gateway is huge!")]),e._v(" "),t("h2",{attrs:{id:"lora"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#lora"}},[e._v("#")]),e._v(" LORA")]),e._v(" "),t("p",[e._v("LoRa is more dedicated at this moment for tinkering and DIY and there is no Off the shelves devices compatible to my knowledge with this gateway.")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{371:function(e,t,r){e.exports=r.p+"assets/img/OpenMQTTGateway_devices_rf1.97b46f9c.png"},372:function(e,t,r){e.exports=r.p+"assets/img/OpenMQTTGateway_devices_rf2.26da8a3a.png"},373:function(e,t,r){e.exports=r.p+"assets/img/OpenMQTTGateway_devices_rf3.85e5cb30.png"},374:function(e,t,r){e.exports=r.p+"assets/img/OpenMQTTGateway_devices_ble.eccdbc5d.png"},436:function(e,t,r){"use strict";r.r(t);var a=r(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:"devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#devices"}},[e._v("#")]),e._v(" Devices")]),e._v(" "),t("p",[e._v("You can take a look to the "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenMQTTGateway compatible website"),t("OutboundLink")],1),e._v(" to have a view of the "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/devices/",target:"_blank",rel:"noopener noreferrer"}},[e._v("supported devices"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Added to that is an overview of devices supported by OpenMQTTGateway:")]),e._v(" "),t("h2",{attrs:{id:"for-radio-frequency-devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#for-radio-frequency-devices"}},[e._v("#")]),e._v(" For radio frequency devices")]),e._v(" "),t("p",[e._v("OpenMQTTGateway can support a wide range of 433mhz/315mhz devices, all the ones with SC5262 / SC5272, HX2262 / HX2272, PT2262 / PT2272, EV1527, RT1527, FP1527, HS1527 chipsets are supported by the RF gateway. Added to that RF2 support Kaku and Pilight an "),t("a",{attrs:{href:"https://wiki.pilight.org/devices",target:"_blank",rel:"noopener noreferrer"}},[e._v("huge list"),t("OutboundLink")],1),e._v(".\nNote that for the moment RF, RF2 and Pilight can not be activated on the same boards together.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(371),alt:"boards",title:":size=250%"}}),e._v(" "),t("img",{attrs:{src:r(372),alt:"boards",title:":size=250%"}}),e._v(" "),t("img",{attrs:{src:r(373),alt:"boards",title:":size=250%"}})]),e._v(" "),t("h2",{attrs:{id:"for-ble-devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#for-ble-devices"}},[e._v("#")]),e._v(" For BLE devices")]),e._v(" "),t("p",[e._v("OpenMQTTGateway is able to scan all the BLE devices that advertise their data so as to do presence detection.\nAdded to that it retrieves the measures from the devices mentioned and linked to below. By default the data are read from the advertisements (no or very little impact on device battery life). For some devices we may connect briefly only to retrieve one or several parameters.")]),e._v(" "),t("p",[e._v("OpenMQTTGateway currently supports the decoding of "),t("a",{attrs:{href:"https://decoder.theengs.io/devices/devices.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("more than 100 Bluetooth devices"),t("OutboundLink")],1),e._v(", which include popular devices like Mi Flora, Xiaomi scales, Inkbird, Govee and ThermoPro thermo-hygrometers and BBQ thermometers, SwitchBot devices status and many more.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("ul",[t("li",[e._v("(2) See https://github.com/atc1441/ATC_MiThermometer")]),e._v(" "),t("li",[e._v("(3) See https://github.com/pvvx/ATC_MiThermometer")])])]),e._v(" "),t("p",[t("img",{attrs:{src:r(374),alt:"devices",title:":size=250%"}})]),e._v(" "),t("h2",{attrs:{id:"for-infrared-ir-devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#for-infrared-ir-devices"}},[e._v("#")]),e._v(" For infrared IR devices")]),e._v(" "),t("p",[e._v("The list of supported devices for ESP is "),t("a",{attrs:{href:"https://github.com/crankyoldgit/IRremoteESP8266/blob/master/SupportedProtocols.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(", and "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/6f73160d1421bebf2c1bbc9b8017978ff5b16520/main/config_IR.h#L123",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(" for Arduino boards, as there is also the possibility of using raw and global cache (ESP) sending possibilities of this gateway is huge!")]),e._v(" "),t("h2",{attrs:{id:"lora"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#lora"}},[e._v("#")]),e._v(" LORA")]),e._v(" "),t("p",[e._v("LoRa is more dedicated at this moment for tinkering and DIY and there is no Off the shelves devices compatible to my knowledge with this gateway.")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/26.f2b7386c.js b/dev/assets/js/26.e4faed96.js similarity index 98% rename from dev/assets/js/26.f2b7386c.js rename to dev/assets/js/26.e4faed96.js index b6ec41a23e..5c06d3ee6d 100644 --- a/dev/assets/js/26.f2b7386c.js +++ b/dev/assets/js/26.e4faed96.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{267:function(a,s,e){a.exports=e.p+"assets/img/OpenMQTTgateway_M5_Stack_Board_Display_Text.b2457906.png"},368:function(a,s,e){a.exports=e.p+"assets/img/OpenMQTTgateway_M5_Stack_Board_Display_Logo.9ad3287a.png"},369:function(a,s,e){a.exports=e.p+"assets/img/OpenMQTTgateway_M5_Stack_Board_Display_Warning.46adc383.png"},433:function(a,s,e){"use strict";e.r(s);var t=e(14),r=Object(t.a)({},(function(){var a=this,s=a._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"m5-boards"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#m5-boards"}},[a._v("#")]),a._v(" M5 Boards")]),a._v(" "),s("p",[a._v("M5 boards, manufactured by "),s("a",{attrs:{href:"https://m5stack.com/",target:"_blank",rel:"noopener noreferrer"}},[a._v("M5Stack"),s("OutboundLink")],1),a._v(" are inexpensive, well featured boards based on ESP32.")]),a._v(" "),s("h2",{attrs:{id:"m5stickc-and-m5stack"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#m5stickc-and-m5stack"}},[a._v("#")]),a._v(" M5StickC and M5Stack")]),a._v(" "),s("p",[a._v("M5StickC and M5Stack are supported by OpenMQTTGateway and provide the following features:")]),a._v(" "),s("h3",{attrs:{id:"_3-low-power-modes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-low-power-modes"}},[a._v("#")]),a._v(" 3 low power modes")]),a._v(" "),s("h4",{attrs:{id:"always-on-display"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#always-on-display"}},[a._v("#")]),a._v(" Always ON display")]),a._v(" "),s("p",[a._v("The display is always ON but decrease its brightness when not processing.")]),a._v(" "),s("h4",{attrs:{id:"on-display-when-processing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#on-display-when-processing"}},[a._v("#")]),a._v(" ON display when processing")]),a._v(" "),s("p",[a._v("The display is OFF when not processing and the ESP32 is put in low power mode.")]),a._v(" "),s("h4",{attrs:{id:"always-off-display"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#always-off-display"}},[a._v("#")]),a._v(" Always OFF display")]),a._v(" "),s("p",[a._v("The display is always OFF, if the board has a led, the led is used when processing.")]),a._v(" "),s("p",[a._v("To change the low power mode you can do it by "),s("a",{attrs:{href:"../use/boards#low-power-mode-for-m5-boards"}},[a._v("MQTT")]),a._v(" or by pushing the middle button (btn B) of the M5Stack and the top button (btn B) of the M5Stick C")]),a._v(" "),s("h3",{attrs:{id:"start-screen"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-screen"}},[a._v("#")]),a._v(" Start screen")]),a._v(" "),s("p",[s("img",{attrs:{src:e(368),alt:"MStack core logo"}})]),a._v(" "),s("h3",{attrs:{id:"sleep-screen"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sleep-screen"}},[a._v("#")]),a._v(" Sleep screen")]),a._v(" "),s("p",[a._v("The screen brightness is put to a minimum so as to reduce power consumption.\n"),s("img",{attrs:{src:e(267),alt:"M5Stack core brightness"}})]),a._v(" "),s("h3",{attrs:{id:"log-display-in-case-of-warning"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#log-display-in-case-of-warning"}},[a._v("#")]),a._v(" Log display in case of warning")]),a._v(" "),s("p",[a._v("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.\n"),s("img",{attrs:{src:e(369),alt:"M5 Stack core warning"}})]),a._v(" "),s("p",[a._v("The M5Stick support low power mode 2 but its display is not supported for the moment.")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{267:function(a,s,e){a.exports=e.p+"assets/img/OpenMQTTgateway_M5_Stack_Board_Display_Text.b2457906.png"},368:function(a,s,e){a.exports=e.p+"assets/img/OpenMQTTgateway_M5_Stack_Board_Display_Logo.9ad3287a.png"},369:function(a,s,e){a.exports=e.p+"assets/img/OpenMQTTgateway_M5_Stack_Board_Display_Warning.46adc383.png"},430:function(a,s,e){"use strict";e.r(s);var t=e(14),r=Object(t.a)({},(function(){var a=this,s=a._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"m5-boards"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#m5-boards"}},[a._v("#")]),a._v(" M5 Boards")]),a._v(" "),s("p",[a._v("M5 boards, manufactured by "),s("a",{attrs:{href:"https://m5stack.com/",target:"_blank",rel:"noopener noreferrer"}},[a._v("M5Stack"),s("OutboundLink")],1),a._v(" are inexpensive, well featured boards based on ESP32.")]),a._v(" "),s("h2",{attrs:{id:"m5stickc-and-m5stack"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#m5stickc-and-m5stack"}},[a._v("#")]),a._v(" M5StickC and M5Stack")]),a._v(" "),s("p",[a._v("M5StickC and M5Stack are supported by OpenMQTTGateway and provide the following features:")]),a._v(" "),s("h3",{attrs:{id:"_3-low-power-modes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-low-power-modes"}},[a._v("#")]),a._v(" 3 low power modes")]),a._v(" "),s("h4",{attrs:{id:"always-on-display"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#always-on-display"}},[a._v("#")]),a._v(" Always ON display")]),a._v(" "),s("p",[a._v("The display is always ON but decrease its brightness when not processing.")]),a._v(" "),s("h4",{attrs:{id:"on-display-when-processing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#on-display-when-processing"}},[a._v("#")]),a._v(" ON display when processing")]),a._v(" "),s("p",[a._v("The display is OFF when not processing and the ESP32 is put in low power mode.")]),a._v(" "),s("h4",{attrs:{id:"always-off-display"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#always-off-display"}},[a._v("#")]),a._v(" Always OFF display")]),a._v(" "),s("p",[a._v("The display is always OFF, if the board has a led, the led is used when processing.")]),a._v(" "),s("p",[a._v("To change the low power mode you can do it by "),s("a",{attrs:{href:"../use/boards#low-power-mode-for-m5-boards"}},[a._v("MQTT")]),a._v(" or by pushing the middle button (btn B) of the M5Stack and the top button (btn B) of the M5Stick C")]),a._v(" "),s("h3",{attrs:{id:"start-screen"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-screen"}},[a._v("#")]),a._v(" Start screen")]),a._v(" "),s("p",[s("img",{attrs:{src:e(368),alt:"MStack core logo"}})]),a._v(" "),s("h3",{attrs:{id:"sleep-screen"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sleep-screen"}},[a._v("#")]),a._v(" Sleep screen")]),a._v(" "),s("p",[a._v("The screen brightness is put to a minimum so as to reduce power consumption.\n"),s("img",{attrs:{src:e(267),alt:"M5Stack core brightness"}})]),a._v(" "),s("h3",{attrs:{id:"log-display-in-case-of-warning"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#log-display-in-case-of-warning"}},[a._v("#")]),a._v(" Log display in case of warning")]),a._v(" "),s("p",[a._v("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.\n"),s("img",{attrs:{src:e(369),alt:"M5 Stack core warning"}})]),a._v(" "),s("p",[a._v("The M5Stick support low power mode 2 but its display is not supported for the moment.")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/27.9e10ca6e.js b/dev/assets/js/27.4620af15.js similarity index 94% rename from dev/assets/js/27.9e10ca6e.js rename to dev/assets/js/27.4620af15.js index ac6ceb9f23..b2b82611b9 100644 --- a/dev/assets/js/27.9e10ca6e.js +++ b/dev/assets/js/27.4620af15.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{388:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_ESP32_binary_flash.e2aec4db.png"},389:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_ESP32_binary_flash2.047e266a.png"},390:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_NodeMCU_PyFlasher.71bc778e.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("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],{383:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_ESP32_binary_flash.e2aec4db.png"},384:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_ESP32_binary_flash2.047e266a.png"},385:function(e,o,t){e.exports=t.p+"assets/img/OpenMQTTgateway_NodeMCU_PyFlasher.71bc778e.png"},446: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(383),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(384),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("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(385),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.37679e09.js b/dev/assets/js/28.bfc8842c.js similarity index 95% rename from dev/assets/js/28.37679e09.js rename to dev/assets/js/28.bfc8842c.js index 3109899ff3..dc336e67f0 100644 --- a/dev/assets/js/28.37679e09.js +++ b/dev/assets/js/28.bfc8842c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{385:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_menu.a42869cd.png"},386:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_enter_parameters.b56b5f33.png"},387:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_save.15fcfc72.png"},448: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(385),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(386),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(387),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("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")])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{388:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_menu.a42869cd.png"},389:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_enter_parameters.b56b5f33.png"},390:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTGateway_Wifi_Manager_save.15fcfc72.png"},450: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(388),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(389),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(390),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("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")])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/29.4c590a74.js b/dev/assets/js/29.4289cd2a.js similarity index 97% rename from dev/assets/js/29.4c590a74.js rename to dev/assets/js/29.4289cd2a.js index e25e45fbd4..687325a7df 100644 --- a/dev/assets/js/29.4c590a74.js +++ b/dev/assets/js/29.4289cd2a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{404:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTGateway_LORA_Configuration.b5f0bb4b.png"},405:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTgateway_ESP32_LORA_MSG.e5943094.png"},406:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTGateway_TTGO32_LORA_Receive.ce846ec8.jpg"},459: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(404),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(405),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(406),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],{407:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTGateway_LORA_Configuration.b5f0bb4b.png"},408:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTgateway_ESP32_LORA_MSG.e5943094.png"},409:function(t,a,e){t.exports=e.p+"assets/img/OpenMQTTGateway_TTGO32_LORA_Receive.ce846ec8.jpg"},460: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(407),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(408),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(409),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.346ea437.js b/dev/assets/js/30.7a3374e9.js similarity index 98% rename from dev/assets/js/30.346ea437.js rename to dev/assets/js/30.7a3374e9.js index 13cfb456c7..87388ad9be 100644 --- a/dev/assets/js/30.346ea437.js +++ b/dev/assets/js/30.7a3374e9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{407:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial1.b8169d69.jpg"},408:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial2.9629e5a0.jpg"},409:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_Pilight_Digoo-DG-R8S.8a0f9d60.png"},460:function(e,t,a){"use strict";a.r(t);var s=a(14),o=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("h3",{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("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 should see :")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/433toMQTT {"value":1315156,"protocol":1,"length":24,"delay":317}')])]),e._v(" "),t("h3",{attrs:{id:"disabling-transmit-function-to-safe-a-pin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disabling-transmit-function-to-safe-a-pin"}},[e._v("#")]),e._v(" Disabling Transmit function to safe a PIN")]),e._v(" "),t("p",[e._v("To disable transmit functions to allow the use of another pin, add the following to the config_rf.h file :")]),e._v(" "),t("p",[t("code",[e._v("#define RF_DISABLE_TRANSMIT")])]),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/MQTTto433" -m \'{"value":1315156}\'')])]),e._v(" "),t("p",[e._v("This command will send by RF the code 1315156 and use the default parameters (protocol 1, delay 350)")]),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(407),alt:"Serial data"}})]),e._v(" "),t("p",[e._v('We see that the Arduino receive the value 1315156 on the MQTT subject "MQTTto433" and send the data by RF')]),e._v(" "),t("p",[e._v("Arduino IDE serial data received when receiving data by 433Mhz")]),e._v(" "),t("p",[t("img",{attrs:{src:a(408),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 support three advanced parameters: bits length, RF protocol and RF pulselength")]),e._v(" "),t("p",[e._v('-if you want to use a bits number different than 24 put inside your topic "length":24 for example')]),e._v(" "),t("p",[e._v('-if you want to use a different RCswitch protocol put inside your payload the protocol number 2, "protocol":2.')]),e._v(" "),t("p",[e._v('-if you want to use a pulselength 315 put inside your topic "delay":315')]),e._v(" "),t("p",[e._v("Example:\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTto433" -m \'{"value":1315156,"protocol":2,"length":24,"delay":315}\'')]),e._v("\nwill make RCSwitch use the protocol 2 with a pulselength of 315ms and a bits number of 24 with a power of 5")]),e._v(" "),t("h3",{attrs:{id:"repeat-the-rf-signal-openmqttgateway-receive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repeat-the-rf-signal-openmqttgateway-receive"}},[e._v("#")]),e._v(" Repeat the RF signal OpenMQTTGateway receive")]),e._v(" "),t("p",[e._v("So as to repeat the RF signal received by the gateway once set the following parameter to true in config_RF.h")]),e._v(" "),t("p",[t("code",[e._v("#define repeatRFwMQTT true")])]),e._v(" "),t("h3",{attrs:{id:"repeat-the-rf-signal-several-times"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repeat-the-rf-signal-several-times"}},[e._v("#")]),e._v(" Repeat the RF signal several times")]),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.')]),e._v(" "),t("p",[e._v("Example:\n"),t("code",[e._v('home/OpenMQTTGateway/commands/MQTTto433 {"value":1315156,"protocol":1,"length":24,"delay":317, "repeat":10}')])]),e._v(" "),t("h3",{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("Default transmit frequency of the CC1101 module is 433.92 Mhz, and this can be can changed by including the frequency in the transmit message. Parameter is "),t("code",[e._v("mhz")]),e._v(" and valid values are 300-348 Mhz, 387-464Mhz and 779-928Mhz. Actual frequency support will depend on your CC1101 board.")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/commands/MQTTto433 {"value":1150,"protocol":6,"length":12,"delay":450,"repeat":8,"frequency":303.732}')])]),e._v(" "),t("p",[e._v("Default receive frequency of the CC1101 module is 433.92 Mhz, and this can be can changed by sending a message with the frequency. 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 CC1101 board")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/commands/MQTTtoRF/config {"frequency":433.92}')])]),e._v(" "),t("p",[e._v("Messages received will include the frequency, and when transmitting on a different frequency the module return to the receive frequency afterwards. ie transmit messages on 303.732 Mhz then receive messages on 433.92 Mhz")]),e._v(" "),t("p",[t("code",[e._v('{"value":4534142,"protocol":6,"length":26,"delay":356,"frequency":315.026}')])]),e._v(" "),t("p",[e._v("You can adjust the tx-power in db for a transmission. Parameter is "),t("code",[e._v("cc1101_pa")]),e._v(" and valid values in decibel are (-30 -20 -15 -10 -6 0 5 7 10 11 12) Default is max!\nThat can be done to reduce range and therefore disturbances with other nearby devices.\nIf you want to send a transmission with a power of 5 db than use the message")]),e._v(" "),t("p",[t("code",[e._v('{"value":1315156,"protocol":2,"length":24,"delay":315, "cc1101_pa":5}')])]),e._v(" "),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(409),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, 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-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-rf-signal-2"}},[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=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{404:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial1.b8169d69.jpg"},405:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial2.9629e5a0.jpg"},406:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_Pilight_Digoo-DG-R8S.8a0f9d60.png"},459:function(e,t,a){"use strict";a.r(t);var s=a(14),o=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("h3",{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("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 should see :")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/433toMQTT {"value":1315156,"protocol":1,"length":24,"delay":317}')])]),e._v(" "),t("h3",{attrs:{id:"disabling-transmit-function-to-safe-a-pin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disabling-transmit-function-to-safe-a-pin"}},[e._v("#")]),e._v(" Disabling Transmit function to safe a PIN")]),e._v(" "),t("p",[e._v("To disable transmit functions to allow the use of another pin, add the following to the config_rf.h file :")]),e._v(" "),t("p",[t("code",[e._v("#define RF_DISABLE_TRANSMIT")])]),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/MQTTto433" -m \'{"value":1315156}\'')])]),e._v(" "),t("p",[e._v("This command will send by RF the code 1315156 and use the default parameters (protocol 1, delay 350)")]),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(404),alt:"Serial data"}})]),e._v(" "),t("p",[e._v('We see that the Arduino receive the value 1315156 on the MQTT subject "MQTTto433" and send the data by RF')]),e._v(" "),t("p",[e._v("Arduino IDE serial data received when receiving data by 433Mhz")]),e._v(" "),t("p",[t("img",{attrs:{src:a(405),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 support three advanced parameters: bits length, RF protocol and RF pulselength")]),e._v(" "),t("p",[e._v('-if you want to use a bits number different than 24 put inside your topic "length":24 for example')]),e._v(" "),t("p",[e._v('-if you want to use a different RCswitch protocol put inside your payload the protocol number 2, "protocol":2.')]),e._v(" "),t("p",[e._v('-if you want to use a pulselength 315 put inside your topic "delay":315')]),e._v(" "),t("p",[e._v("Example:\n"),t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTto433" -m \'{"value":1315156,"protocol":2,"length":24,"delay":315}\'')]),e._v("\nwill make RCSwitch use the protocol 2 with a pulselength of 315ms and a bits number of 24 with a power of 5")]),e._v(" "),t("h3",{attrs:{id:"repeat-the-rf-signal-openmqttgateway-receive"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repeat-the-rf-signal-openmqttgateway-receive"}},[e._v("#")]),e._v(" Repeat the RF signal OpenMQTTGateway receive")]),e._v(" "),t("p",[e._v("So as to repeat the RF signal received by the gateway once set the following parameter to true in config_RF.h")]),e._v(" "),t("p",[t("code",[e._v("#define repeatRFwMQTT true")])]),e._v(" "),t("h3",{attrs:{id:"repeat-the-rf-signal-several-times"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repeat-the-rf-signal-several-times"}},[e._v("#")]),e._v(" Repeat the RF signal several times")]),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.')]),e._v(" "),t("p",[e._v("Example:\n"),t("code",[e._v('home/OpenMQTTGateway/commands/MQTTto433 {"value":1315156,"protocol":1,"length":24,"delay":317, "repeat":10}')])]),e._v(" "),t("h3",{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("Default transmit frequency of the CC1101 module is 433.92 Mhz, and this can be can changed by including the frequency in the transmit message. Parameter is "),t("code",[e._v("mhz")]),e._v(" and valid values are 300-348 Mhz, 387-464Mhz and 779-928Mhz. Actual frequency support will depend on your CC1101 board.")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/commands/MQTTto433 {"value":1150,"protocol":6,"length":12,"delay":450,"repeat":8,"frequency":303.732}')])]),e._v(" "),t("p",[e._v("Default receive frequency of the CC1101 module is 433.92 Mhz, and this can be can changed by sending a message with the frequency. 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 CC1101 board")]),e._v(" "),t("p",[t("code",[e._v('home/OpenMQTTGateway/commands/MQTTtoRF/config {"frequency":433.92}')])]),e._v(" "),t("p",[e._v("Messages received will include the frequency, and when transmitting on a different frequency the module return to the receive frequency afterwards. ie transmit messages on 303.732 Mhz then receive messages on 433.92 Mhz")]),e._v(" "),t("p",[t("code",[e._v('{"value":4534142,"protocol":6,"length":26,"delay":356,"frequency":315.026}')])]),e._v(" "),t("p",[e._v("You can adjust the tx-power in db for a transmission. Parameter is "),t("code",[e._v("cc1101_pa")]),e._v(" and valid values in decibel are (-30 -20 -15 -10 -6 0 5 7 10 11 12) Default is max!\nThat can be done to reduce range and therefore disturbances with other nearby devices.\nIf you want to send a transmission with a power of 5 db than use the message")]),e._v(" "),t("p",[t("code",[e._v('{"value":1315156,"protocol":2,"length":24,"delay":315, "cc1101_pa":5}')])]),e._v(" "),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(406),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, 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-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#send-data-by-mqtt-to-convert-it-on-rf-signal-2"}},[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=o.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/34.dee3f7a6.js b/dev/assets/js/34.9e098c40.js similarity index 92% rename from dev/assets/js/34.dee3f7a6.js rename to dev/assets/js/34.9e098c40.js index 38fd4c9e23..649d2037b1 100644 --- a/dev/assets/js/34.dee3f7a6.js +++ b/dev/assets/js/34.9e098c40.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{376:function(t,e,r){t.exports=r.p+"assets/img/OpenMQTTgateway_ESP8266_Addon_IR.0b60a2b2.png"},377:function(t,e,r){t.exports=r.p+"assets/img/OpenMQTTgateway_ESP32_Addon_IR.0be79a89.png"},439:function(t,e,r){"use strict";r.r(e);var a=r(14),s=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ir-gateway"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ir-gateway"}},[t._v("#")]),t._v(" IR gateway")]),t._v(" "),e("h2",{attrs:{id:"compatible-parts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#compatible-parts"}},[t._v("#")]),t._v(" Compatible parts")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Module")]),t._v(" "),e("th",[t._v("Purpose")]),t._v(" "),e("th",[t._v("Where to Buy")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("IR diode")]),t._v(" "),e("td",[t._v("Emitting")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("IR receiver")]),t._v(" "),e("td",[t._v("Receiving")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("transistor 2N2222")]),t._v(" "),e("td",[t._v("Amplify uC signal for the IR diode")]),t._v(" "),e("td",[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("330 ohms resistor")]),t._v(" "),e("td",[t._v("-")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("220 ohms resistor")]),t._v(" "),e("td",[t._v("limit current to LED")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])])])]),t._v(" "),e("p",[t._v("The IR setup can work with bc547 and a 4x3 LED-Matrix.")]),t._v(" "),e("h2",{attrs:{id:"pinout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#pinout"}},[t._v("#")]),t._v(" Pinout")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Board")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Receiver Pin")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Emitter Pin")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("ESP8266")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D4")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D0")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("27/"),e("strong",[t._v("26")])]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("14")])])])]),t._v(" "),e("p",[t._v("Connect the Emitter and Receiver to a 5V supply source, and the ground of your supply source to the ground of your board.")]),t._v(" "),e("h2",{attrs:{id:"esp8266-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#esp8266-hardware-setup"}},[t._v("#")]),t._v(" ESP8266 Hardware setup")]),t._v(" "),e("p",[e("img",{attrs:{src:r(376),alt:"IR"}})]),t._v(" "),e("h2",{attrs:{id:"esp32-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#esp32-hardware-setup"}},[t._v("#")]),t._v(" ESP32 Hardware setup")]),t._v(" "),e("p",[e("img",{attrs:{src:r(377),alt:"IR"}})]),t._v(" "),e("h2",{attrs:{id:"credits"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#credits"}},[t._v("#")]),t._v(" Credits")]),t._v(" "),e("p",[t._v("This gateway exists thanks to the work done on "),e("a",{attrs:{href:"https://github.com/z3t0/Arduino-IRremote",target:"_blank",rel:"noopener noreferrer"}},[t._v("IRRemote"),e("OutboundLink")],1),t._v(" and "),e("a",{attrs:{href:"https://github.com/crankyoldgit/IRremoteESP8266",target:"_blank",rel:"noopener noreferrer"}},[t._v("IRremoteESP8266"),e("OutboundLink")],1),t._v(" libraries. Thanks for the works of contributors and especially "),e("a",{attrs:{href:"https://github.com/crankyoldgit",target:"_blank",rel:"noopener noreferrer"}},[t._v("@crankyoldgit"),e("OutboundLink")],1),t._v(" for its active contributions.")])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{377:function(t,e,r){t.exports=r.p+"assets/img/OpenMQTTgateway_ESP8266_Addon_IR.0b60a2b2.png"},378:function(t,e,r){t.exports=r.p+"assets/img/OpenMQTTgateway_ESP32_Addon_IR.0be79a89.png"},440:function(t,e,r){"use strict";r.r(e);var a=r(14),s=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ir-gateway"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ir-gateway"}},[t._v("#")]),t._v(" IR gateway")]),t._v(" "),e("h2",{attrs:{id:"compatible-parts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#compatible-parts"}},[t._v("#")]),t._v(" Compatible parts")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Module")]),t._v(" "),e("th",[t._v("Purpose")]),t._v(" "),e("th",[t._v("Where to Buy")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("IR diode")]),t._v(" "),e("td",[t._v("Emitting")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("IR receiver")]),t._v(" "),e("td",[t._v("Receiving")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("transistor 2N2222")]),t._v(" "),e("td",[t._v("Amplify uC signal for the IR diode")]),t._v(" "),e("td",[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("330 ohms resistor")]),t._v(" "),e("td",[t._v("-")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("220 ohms resistor")]),t._v(" "),e("td",[t._v("limit current to LED")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])])])]),t._v(" "),e("p",[t._v("The IR setup can work with bc547 and a 4x3 LED-Matrix.")]),t._v(" "),e("h2",{attrs:{id:"pinout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#pinout"}},[t._v("#")]),t._v(" Pinout")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Board")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Receiver Pin")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Emitter Pin")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("ESP8266")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D4")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D0")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("27/"),e("strong",[t._v("26")])]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("14")])])])]),t._v(" "),e("p",[t._v("Connect the Emitter and Receiver to a 5V supply source, and the ground of your supply source to the ground of your board.")]),t._v(" "),e("h2",{attrs:{id:"esp8266-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#esp8266-hardware-setup"}},[t._v("#")]),t._v(" ESP8266 Hardware setup")]),t._v(" "),e("p",[e("img",{attrs:{src:r(377),alt:"IR"}})]),t._v(" "),e("h2",{attrs:{id:"esp32-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#esp32-hardware-setup"}},[t._v("#")]),t._v(" ESP32 Hardware setup")]),t._v(" "),e("p",[e("img",{attrs:{src:r(378),alt:"IR"}})]),t._v(" "),e("h2",{attrs:{id:"credits"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#credits"}},[t._v("#")]),t._v(" Credits")]),t._v(" "),e("p",[t._v("This gateway exists thanks to the work done on "),e("a",{attrs:{href:"https://github.com/z3t0/Arduino-IRremote",target:"_blank",rel:"noopener noreferrer"}},[t._v("IRRemote"),e("OutboundLink")],1),t._v(" and "),e("a",{attrs:{href:"https://github.com/crankyoldgit/IRremoteESP8266",target:"_blank",rel:"noopener noreferrer"}},[t._v("IRremoteESP8266"),e("OutboundLink")],1),t._v(" libraries. Thanks for the works of contributors and especially "),e("a",{attrs:{href:"https://github.com/crankyoldgit",target:"_blank",rel:"noopener noreferrer"}},[t._v("@crankyoldgit"),e("OutboundLink")],1),t._v(" for its active contributions.")])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/35.453fce32.js b/dev/assets/js/35.02a32396.js similarity index 99% rename from dev/assets/js/35.453fce32.js rename to dev/assets/js/35.02a32396.js index 09ad077982..c65ee6a519 100644 --- a/dev/assets/js/35.453fce32.js +++ b/dev/assets/js/35.02a32396.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{379:function(t,e,r){t.exports=r.p+"assets/img/OpenMQTTgateway_ESP32_Addon_RF.e2747c60.png"},380:function(t,e,r){t.exports=r.p+"assets/img/OpenMQTTgateway_ESP8266_Addon_RF.fc195165.png"},442:function(t,e,r){"use strict";r.r(e);var a=r(14),s=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"rf-gateway-433mhz-315mhz"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rf-gateway-433mhz-315mhz"}},[t._v("#")]),t._v(" RF gateway (433mhz/315mhz)")]),t._v(" "),e("h2",{attrs:{id:"protocols-modules-and-library"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#protocols-modules-and-library"}},[t._v("#")]),t._v(" Protocols, modules and library")]),t._v(" "),e("p",[t._v("RTL_433 covers OOK protocols detailed "),e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("here")]),t._v(" and supports auto-discovery following Home Assistant convention. The other libraries/modules are more for advanced users.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Board")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Protocols")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Assembly/Soldering required")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Heltec LORA V2 433Mhz")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")]),t._v(", receiving only")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("No")])]),t._v(" "),e("tr",[e("td",[t._v("LILYGO® LoRa32 V2.1_1.6.1 433 Mhz")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")]),t._v(", receiving only")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("No")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32 + SX127X")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")]),t._v(", receiving only")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Yes")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32 + CC1101")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")]),t._v(", RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Yes")])]),t._v(" "),e("tr",[e("td",[t._v("ESP8266 + Basic RF modules (SRX, STX, XD RF, FS1000A")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Yes")])]),t._v(" "),e("tr",[e("td",[t._v("ESP8266 + CC1101 (might have lower range than with SRX/STX above)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Yes")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32 + Basic RF modules (SRX, STX, XD RF, FS1000A")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Yes")])])])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("If you want to try the RTL_433 module with a combination or a board outside of this list, verify that it has an SX1278 or a SX1276")])]),t._v(" "),e("p",[t._v("Heltec LORA V3 is not compatible with RTL_433 library as it is based on an SX1262 module.")]),t._v(" "),e("h2",{attrs:{id:"assembly-soldering-required-parts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#assembly-soldering-required-parts"}},[t._v("#")]),t._v(" Assembly/soldering required parts")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Module")]),t._v(" "),e("th",[t._v("Purpose")]),t._v(" "),e("th",[t._v("Compatible modules")]),t._v(" "),e("th",[t._v("Receiver Switching")]),t._v(" "),e("th",[t._v("Where to Buy")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("SRX882 or SRX882S (recommended)")]),t._v(" "),e("td",[t._v("433Mhz Receiver")]),t._v(" "),e("td",[t._v("RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",[t._v("Supported")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("STX882 (recommended)")]),t._v(" "),e("td",[t._v("433Mhz Transmitter")]),t._v(" "),e("td",[t._v("RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",[t._v("Supported")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("CC1101")]),t._v(" "),e("td",[t._v("433Mhz Transceiver")]),t._v(" "),e("td",[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")]),t._v(", RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",[t._v("Supported")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("SX1276/SX1278")]),t._v(" "),e("td",[t._v("433Mhz Transceiver")]),t._v(" "),e("td",[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")])]),t._v(" "),e("td",[t._v("Not Supported")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("LilyGo/Heltec")]),t._v(" "),e("td",[t._v("433Mhz Transceiver")]),t._v(" "),e("td",[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")])]),t._v(" "),e("td",[t._v("Not Supported")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])])])]),t._v(" "),e("h3",{attrs:{id:"srx-stx-pinout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#srx-stx-pinout"}},[t._v("#")]),t._v(" SRX STX Pinout")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Board")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Receiver Pin")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Emitter Pin")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("ESP8266")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D2/"),e("strong",[t._v("D3")]),t._v("/D1/D8")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("RX")]),t._v("/D2")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("27")]),t._v("/26")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("12")])]),t._v(" "),e("tr",[e("td",[t._v("RF BRIDGE")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("RF BRIDGE "),e("a",{attrs:{href:"https://github.com/xoseperez/espurna/wiki/Hardware-Itead-Sonoff-RF-Bridge---Direct-Hack",target:"_blank",rel:"noopener noreferrer"}},[t._v("DIRECT HACK"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("4")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("5")])]),t._v(" "),e("tr",[e("td",[t._v("SONOFF RFR3")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("4")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("RF WIFI GATEWAY")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("5")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])])])]),t._v(" "),e("p",[t._v("Connect the Emitter and Receiver to a 5V or 3.3V supply source, check datasheet of your modules to confirm ("),e("strong",[t._v("3.3V")]),t._v(" for CC1101), and the ground of your supply source to the ground of your board.")]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("With SRX882S receiver connect the CS pin to 3.3V")])]),t._v(" "),e("h3",{attrs:{id:"cc1101-pinout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cc1101-pinout"}},[t._v("#")]),t._v(" CC1101 Pinout")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Board")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Receiver Pin(GDO2)")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Emitter Pin(GDO0)")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("SCK")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("VCC")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("MOSI")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("MISO")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("CSN")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("GND")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("ESP8266")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D2/"),e("strong",[t._v("D3")]),t._v("/D1/D8")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("RX")]),t._v("/D2")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D5")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("3V3")])]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D7")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D6")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D8")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("GND")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("D27")])]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D12")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D18")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("3V3")])]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D23")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D19")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D5")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("GND")])])])]),t._v(" "),e("p",[t._v("To use the CC1101 module, "),e("code",[t._v("ZradioCC1101")]),t._v(" must be uncomment in the "),e("code",[t._v("User_config.h")]),t._v(" or added to the "),e("code",[t._v("build_flags")]),t._v(".\nMore information about the "),e("a",{attrs:{href:"https://github.com/LSatan/SmartRC-CC1101-Driver-Lib#wiring",target:"_blank",rel:"noopener noreferrer"}},[t._v("CC1101 wiring"),e("OutboundLink")],1),t._v(". ( Please note that with OMG we are recommending CC1101 GDO2 to be connected to ESP32 D27 and GDO0 to be connected to D12, this is different than the LSatan diagram. This is due to the ESP32 using D2 as part of the boot process. )")]),t._v(" "),e("h2",{attrs:{id:"esp32-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#esp32-hardware-setup"}},[t._v("#")]),t._v(" ESP32 Hardware setup")]),t._v(" "),e("p",[e("img",{attrs:{src:r(379),alt:"Addon_RF"}})]),t._v(" "),e("h2",{attrs:{id:"esp8266-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#esp8266-hardware-setup"}},[t._v("#")]),t._v(" ESP8266 Hardware setup")]),t._v(" "),e("p",[t._v("If the gateway works only when serial monitor is connected don't use D3 use D2 instead (gpio 4) and modify config_RF.h accordingly.")]),t._v(" "),e("p",[t._v("With SRX882 some users reported that D3 is not working use D1 instead in this case and modify config_RF.h accordingly.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(380),alt:"Addon_RF"}})]),t._v(" "),e("h2",{attrs:{id:"sonoff-rf-bridge-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sonoff-rf-bridge-hardware-setup"}},[t._v("#")]),t._v(" SONOFF RF Bridge Hardware setup")]),t._v(" "),e("p",[t._v("Per default there is no need on modifying the RF Bridge hardware, unless you don't want to use the provided RF controller (EFM8BB1). Indeed if you want to extend the protocols supported by the bridge you can "),e("a",{attrs:{href:"https://github.com/xoseperez/espurna/wiki/Hardware-Itead-Sonoff-RF-Bridge---Direct-Hack",target:"_blank",rel:"noopener noreferrer"}},[t._v("bypass this controller"),e("OutboundLink")],1),t._v(" and use the ESP8255 capacities to decode RF Signal.\nThe RF processing can be achieved after the modification by either RF, RF2 or Pilight gateways.")]),t._v(" "),e("h2",{attrs:{id:"sonoff-rfr3-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sonoff-rfr3-hardware-setup"}},[t._v("#")]),t._v(" SONOFF RFR3 Hardware setup")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://1technophile.blogspot.com/2019/08/new-sonoff-rfr3-as-433tomqtt-gateway.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Connect GPIO4 of the ESP8255 to the pin D0 of SYN470"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"wifi-rf-gateway-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#wifi-rf-gateway-hardware-setup"}},[t._v("#")]),t._v(" WIFI RF GATEWAY Hardware setup")]),t._v(" "),e("p",[t._v("This board doesn't require any hardware modifications.")])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{379:function(t,e,r){t.exports=r.p+"assets/img/OpenMQTTgateway_ESP32_Addon_RF.e2747c60.png"},380:function(t,e,r){t.exports=r.p+"assets/img/OpenMQTTgateway_ESP8266_Addon_RF.fc195165.png"},441:function(t,e,r){"use strict";r.r(e);var a=r(14),s=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"rf-gateway-433mhz-315mhz"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rf-gateway-433mhz-315mhz"}},[t._v("#")]),t._v(" RF gateway (433mhz/315mhz)")]),t._v(" "),e("h2",{attrs:{id:"protocols-modules-and-library"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#protocols-modules-and-library"}},[t._v("#")]),t._v(" Protocols, modules and library")]),t._v(" "),e("p",[t._v("RTL_433 covers OOK protocols detailed "),e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("here")]),t._v(" and supports auto-discovery following Home Assistant convention. The other libraries/modules are more for advanced users.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Board")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Protocols")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Assembly/Soldering required")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Heltec LORA V2 433Mhz")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")]),t._v(", receiving only")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("No")])]),t._v(" "),e("tr",[e("td",[t._v("LILYGO® LoRa32 V2.1_1.6.1 433 Mhz")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")]),t._v(", receiving only")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("No")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32 + SX127X")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")]),t._v(", receiving only")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Yes")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32 + CC1101")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")]),t._v(", RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Yes")])]),t._v(" "),e("tr",[e("td",[t._v("ESP8266 + Basic RF modules (SRX, STX, XD RF, FS1000A")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Yes")])]),t._v(" "),e("tr",[e("td",[t._v("ESP8266 + CC1101 (might have lower range than with SRX/STX above)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Yes")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32 + Basic RF modules (SRX, STX, XD RF, FS1000A")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Yes")])])])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("If you want to try the RTL_433 module with a combination or a board outside of this list, verify that it has an SX1278 or a SX1276")])]),t._v(" "),e("p",[t._v("Heltec LORA V3 is not compatible with RTL_433 library as it is based on an SX1262 module.")]),t._v(" "),e("h2",{attrs:{id:"assembly-soldering-required-parts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#assembly-soldering-required-parts"}},[t._v("#")]),t._v(" Assembly/soldering required parts")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Module")]),t._v(" "),e("th",[t._v("Purpose")]),t._v(" "),e("th",[t._v("Compatible modules")]),t._v(" "),e("th",[t._v("Receiver Switching")]),t._v(" "),e("th",[t._v("Where to Buy")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("SRX882 or SRX882S (recommended)")]),t._v(" "),e("td",[t._v("433Mhz Receiver")]),t._v(" "),e("td",[t._v("RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",[t._v("Supported")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("STX882 (recommended)")]),t._v(" "),e("td",[t._v("433Mhz Transmitter")]),t._v(" "),e("td",[t._v("RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",[t._v("Supported")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("CC1101")]),t._v(" "),e("td",[t._v("433Mhz Transceiver")]),t._v(" "),e("td",[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")]),t._v(", RF(RCSwitch), RF2(KaKu), Pilight")]),t._v(" "),e("td",[t._v("Supported")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("SX1276/SX1278")]),t._v(" "),e("td",[t._v("433Mhz Transceiver")]),t._v(" "),e("td",[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")])]),t._v(" "),e("td",[t._v("Not Supported")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("LilyGo/Heltec")]),t._v(" "),e("td",[t._v("433Mhz Transceiver")]),t._v(" "),e("td",[e("a",{attrs:{href:"../use/rf#supported-decoders"}},[t._v("RTL_433")])]),t._v(" "),e("td",[t._v("Not Supported")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])])])]),t._v(" "),e("h3",{attrs:{id:"srx-stx-pinout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#srx-stx-pinout"}},[t._v("#")]),t._v(" SRX STX Pinout")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Board")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Receiver Pin")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Emitter Pin")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("ESP8266")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D2/"),e("strong",[t._v("D3")]),t._v("/D1/D8")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("RX")]),t._v("/D2")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("27")]),t._v("/26")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("12")])]),t._v(" "),e("tr",[e("td",[t._v("RF BRIDGE")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("RF BRIDGE "),e("a",{attrs:{href:"https://github.com/xoseperez/espurna/wiki/Hardware-Itead-Sonoff-RF-Bridge---Direct-Hack",target:"_blank",rel:"noopener noreferrer"}},[t._v("DIRECT HACK"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("4")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("5")])]),t._v(" "),e("tr",[e("td",[t._v("SONOFF RFR3")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("4")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("RF WIFI GATEWAY")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("5")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])])])]),t._v(" "),e("p",[t._v("Connect the Emitter and Receiver to a 5V or 3.3V supply source, check datasheet of your modules to confirm ("),e("strong",[t._v("3.3V")]),t._v(" for CC1101), and the ground of your supply source to the ground of your board.")]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("With SRX882S receiver connect the CS pin to 3.3V")])]),t._v(" "),e("h3",{attrs:{id:"cc1101-pinout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cc1101-pinout"}},[t._v("#")]),t._v(" CC1101 Pinout")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Board")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Receiver Pin(GDO2)")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Emitter Pin(GDO0)")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("SCK")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("VCC")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("MOSI")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("MISO")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("CSN")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("GND")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("ESP8266")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D2/"),e("strong",[t._v("D3")]),t._v("/D1/D8")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("RX")]),t._v("/D2")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D5")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("3V3")])]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D7")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D6")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D8")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("GND")])]),t._v(" "),e("tr",[e("td",[t._v("ESP32")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("D27")])]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D12")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D18")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("strong",[t._v("3V3")])]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D23")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D19")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D5")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("GND")])])])]),t._v(" "),e("p",[t._v("To use the CC1101 module, "),e("code",[t._v("ZradioCC1101")]),t._v(" must be uncomment in the "),e("code",[t._v("User_config.h")]),t._v(" or added to the "),e("code",[t._v("build_flags")]),t._v(".\nMore information about the "),e("a",{attrs:{href:"https://github.com/LSatan/SmartRC-CC1101-Driver-Lib#wiring",target:"_blank",rel:"noopener noreferrer"}},[t._v("CC1101 wiring"),e("OutboundLink")],1),t._v(". ( Please note that with OMG we are recommending CC1101 GDO2 to be connected to ESP32 D27 and GDO0 to be connected to D12, this is different than the LSatan diagram. This is due to the ESP32 using D2 as part of the boot process. )")]),t._v(" "),e("h2",{attrs:{id:"esp32-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#esp32-hardware-setup"}},[t._v("#")]),t._v(" ESP32 Hardware setup")]),t._v(" "),e("p",[e("img",{attrs:{src:r(379),alt:"Addon_RF"}})]),t._v(" "),e("h2",{attrs:{id:"esp8266-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#esp8266-hardware-setup"}},[t._v("#")]),t._v(" ESP8266 Hardware setup")]),t._v(" "),e("p",[t._v("If the gateway works only when serial monitor is connected don't use D3 use D2 instead (gpio 4) and modify config_RF.h accordingly.")]),t._v(" "),e("p",[t._v("With SRX882 some users reported that D3 is not working use D1 instead in this case and modify config_RF.h accordingly.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(380),alt:"Addon_RF"}})]),t._v(" "),e("h2",{attrs:{id:"sonoff-rf-bridge-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sonoff-rf-bridge-hardware-setup"}},[t._v("#")]),t._v(" SONOFF RF Bridge Hardware setup")]),t._v(" "),e("p",[t._v("Per default there is no need on modifying the RF Bridge hardware, unless you don't want to use the provided RF controller (EFM8BB1). Indeed if you want to extend the protocols supported by the bridge you can "),e("a",{attrs:{href:"https://github.com/xoseperez/espurna/wiki/Hardware-Itead-Sonoff-RF-Bridge---Direct-Hack",target:"_blank",rel:"noopener noreferrer"}},[t._v("bypass this controller"),e("OutboundLink")],1),t._v(" and use the ESP8255 capacities to decode RF Signal.\nThe RF processing can be achieved after the modification by either RF, RF2 or Pilight gateways.")]),t._v(" "),e("h2",{attrs:{id:"sonoff-rfr3-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sonoff-rfr3-hardware-setup"}},[t._v("#")]),t._v(" SONOFF RFR3 Hardware setup")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://1technophile.blogspot.com/2019/08/new-sonoff-rfr3-as-433tomqtt-gateway.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Connect GPIO4 of the ESP8255 to the pin D0 of SYN470"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"wifi-rf-gateway-hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#wifi-rf-gateway-hardware-setup"}},[t._v("#")]),t._v(" WIFI RF GATEWAY Hardware setup")]),t._v(" "),e("p",[t._v("This board doesn't require any hardware modifications.")])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/37.0a0fb861.js b/dev/assets/js/37.0ddc0ef4.js similarity index 99% rename from dev/assets/js/37.0a0fb861.js rename to dev/assets/js/37.0ddc0ef4.js index 21a50dcdbe..43f2fdeec0 100644 --- a/dev/assets/js/37.0a0fb861.js +++ b/dev/assets/js/37.0ddc0ef4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{276:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-Configuration-Home-Assistant.3ca02117.png"},277:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_Home_Assistant_MQTT_discovery.e0225c4f.png"},446: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.3ca02117.png"},277:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_Home_Assistant_MQTT_discovery.e0225c4f.png"},445: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/38.b809c4da.js b/dev/assets/js/38.8be8b296.js similarity index 86% rename from dev/assets/js/38.b809c4da.js rename to dev/assets/js/38.8be8b296.js index d532d9ba78..4c39bd33c0 100644 --- a/dev/assets/js/38.b809c4da.js +++ b/dev/assets/js/38.8be8b296.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{383:function(t,e,o){t.exports=o.p+"assets/img/OpenMQTTGateway-Build-gitpod-env.f45ab630.png"},384:function(t,e,o){t.exports=o.p+"assets/img/OpenMQTTGateway-Build-gitpod.ad1f9ba9.png"},447:function(t,e,o){"use strict";o.r(e);var n=o(14),i=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"option-4-build-from-the-web"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#option-4-build-from-the-web"}},[t._v("#")]),t._v(" (Option 4) Build from the web")]),t._v(" "),e("p",[t._v("To build OpenMQTTGateway from the web and download the binary, follow these steps:")]),t._v(" "),e("ol",[e("li",[e("p",[t._v("Use Gitpod by clicking on the link below:\n"),e("a",{attrs:{href:"https://gitpod.io#https://github.com/1technophile/OpenMQTTGateway/tree/development",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://gitpod.io#https://github.com/1technophile/OpenMQTTGateway/tree/development"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("This will generate a development environment in your browser and install "),e("a",{attrs:{href:"https://platformio.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("platformio"),e("OutboundLink")],1),t._v(" as a build environment.")])]),t._v(" "),e("li",[e("p",[t._v("A first build for "),e("code",[t._v("esp32dev-ble")]),t._v(" will be launched automatically. To modify the environment configuration, go to the environments.ini file in the root folder and launch the command like the one shown at the bottom of the image below:\n"),e("code",[t._v("platformio run -e ")])])])]),t._v(" "),e("p",[e("img",{attrs:{src:o(383),alt:"Gitpod build success"}})]),t._v(" "),e("ol",{attrs:{start:"4"}},[e("li",[e("p",[t._v("Wait for the server to build the binary. Once you see [SUCCESS], you can go to "),e("code",[t._v(".pio/build/")]),t._v(" and download "),e("code",[t._v("firmware.bin")]),t._v(" and "),e("code",[t._v("partitions.bin")]),t._v(' by right-clicking on each and selecting "Download."\n'),e("img",{attrs:{src:o(384),alt:"Gitpod build download"}})])]),t._v(" "),e("li",[e("p",[t._v("Finally, follow "),e("RouterLink",{attrs:{to:"/upload/binaries.html"}},[t._v("Option 2")]),t._v(" to upload the binary.")],1)])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{386:function(t,e,o){t.exports=o.p+"assets/img/OpenMQTTGateway-Build-gitpod-env.f45ab630.png"},387:function(t,e,o){t.exports=o.p+"assets/img/OpenMQTTGateway-Build-gitpod.ad1f9ba9.png"},448:function(t,e,o){"use strict";o.r(e);var n=o(14),i=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"option-4-build-from-the-web"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#option-4-build-from-the-web"}},[t._v("#")]),t._v(" (Option 4) Build from the web")]),t._v(" "),e("p",[t._v("To build OpenMQTTGateway from the web and download the binary, follow these steps:")]),t._v(" "),e("ol",[e("li",[e("p",[t._v("Use Gitpod by clicking on the link below:\n"),e("a",{attrs:{href:"https://gitpod.io#https://github.com/1technophile/OpenMQTTGateway/tree/development",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://gitpod.io#https://github.com/1technophile/OpenMQTTGateway/tree/development"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("This will generate a development environment in your browser and install "),e("a",{attrs:{href:"https://platformio.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("platformio"),e("OutboundLink")],1),t._v(" as a build environment.")])]),t._v(" "),e("li",[e("p",[t._v("A first build for "),e("code",[t._v("esp32dev-ble")]),t._v(" will be launched automatically. To modify the environment configuration, go to the environments.ini file in the root folder and launch the command like the one shown at the bottom of the image below:\n"),e("code",[t._v("platformio run -e ")])])])]),t._v(" "),e("p",[e("img",{attrs:{src:o(386),alt:"Gitpod build success"}})]),t._v(" "),e("ol",{attrs:{start:"4"}},[e("li",[e("p",[t._v("Wait for the server to build the binary. Once you see [SUCCESS], you can go to "),e("code",[t._v(".pio/build/")]),t._v(" and download "),e("code",[t._v("firmware.bin")]),t._v(" and "),e("code",[t._v("partitions.bin")]),t._v(' by right-clicking on each and selecting "Download."\n'),e("img",{attrs:{src:o(387),alt:"Gitpod build download"}})])]),t._v(" "),e("li",[e("p",[t._v("Finally, follow "),e("RouterLink",{attrs:{to:"/upload/binaries.html"}},[t._v("Option 2")]),t._v(" to upload the binary.")],1)])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/40.6dffcf8e.js b/dev/assets/js/40.d70b6b6c.js similarity index 97% rename from dev/assets/js/40.6dffcf8e.js rename to dev/assets/js/40.d70b6b6c.js index 1e753e9838..b6ee335de4 100644 --- a/dev/assets/js/40.6dffcf8e.js +++ b/dev/assets/js/40.d70b6b6c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{401:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial_2G_1.55e6a1b4.jpg"},402:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial_2G_2.262163e3.jpg"},456: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(401),alt:""}})]),e._v(" "),t("p",[e._v("Arduino IDE serial data received when receiving SMS")]),e._v(" "),t("p",[t("img",{attrs:{src:a(402),alt:""}})])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{401:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial_2G_1.55e6a1b4.jpg"},402:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway_serial_2G_2.262163e3.jpg"},457: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(401),alt:""}})]),e._v(" "),t("p",[e._v("Arduino IDE serial data received when receiving SMS")]),e._v(" "),t("p",[t("img",{attrs:{src:a(402),alt:""}})])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/42.22a6564e.js b/dev/assets/js/42.743e7125.js similarity index 98% rename from dev/assets/js/42.22a6564e.js rename to dev/assets/js/42.743e7125.js index 383fc8e6c1..337d64c357 100644 --- a/dev/assets/js/42.22a6564e.js +++ b/dev/assets/js/42.743e7125.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{353:function(t,a,s){t.exports=s.p+"assets/img/OpenMQTTgateway_OpenHAB_Control.d6c2beb5.png"},425: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(353),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],{343:function(t,a,s){t.exports=s.p+"assets/img/OpenMQTTgateway_OpenHAB_Control.d6c2beb5.png"},424: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(343),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/43.fc4503b4.js b/dev/assets/js/43.eb0af3bc.js similarity index 89% rename from dev/assets/js/43.fc4503b4.js rename to dev/assets/js/43.eb0af3bc.js index ab0f658b3b..10739a73ee 100644 --- a/dev/assets/js/43.fc4503b4.js +++ b/dev/assets/js/43.eb0af3bc.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{374:function(e,t,r){e.exports=r.p+"assets/img/OpenMQTTGateway_controllers.9f2368c8.png"},435: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:"controller"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#controller"}},[e._v("#")]),e._v(" Controller")]),e._v(" "),t("p",[e._v("MQTT enables you to connect easily a controller so as to monitor, control and automate scenarios.")]),e._v(" "),t("p",[e._v("The following controllers (and many other software) are compatible with MQTT:")]),e._v(" "),t("p",[t("img",{attrs:{src:r(374),alt:"controllers"}})]),e._v(" "),t("p",[e._v("OpenMQTTGateway is independent from these projects, you have the liberty of choice among all the compatible software.")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://www.openhab.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenHAB"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.home-assistant.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("Home Assistant"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.domoticz.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Domoticz"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.jeedom.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Jeedom"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://nodered.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node Red"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://fhem.de",target:"_blank",rel:"noopener noreferrer"}},[e._v("FHEM"),t("OutboundLink")],1)])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{370:function(e,t,r){e.exports=r.p+"assets/img/OpenMQTTGateway_controllers.9f2368c8.png"},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:"controller"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#controller"}},[e._v("#")]),e._v(" Controller")]),e._v(" "),t("p",[e._v("MQTT enables you to connect easily a controller so as to monitor, control and automate scenarios.")]),e._v(" "),t("p",[e._v("The following controllers (and many other software) are compatible with MQTT:")]),e._v(" "),t("p",[t("img",{attrs:{src:r(370),alt:"controllers"}})]),e._v(" "),t("p",[e._v("OpenMQTTGateway is independent from these projects, you have the liberty of choice among all the compatible software.")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://www.openhab.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenHAB"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.home-assistant.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("Home Assistant"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.domoticz.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Domoticz"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.jeedom.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Jeedom"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://nodered.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node Red"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://fhem.de",target:"_blank",rel:"noopener noreferrer"}},[e._v("FHEM"),t("OutboundLink")],1)])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/44.0ecd8b2f.js b/dev/assets/js/44.70b34d5f.js similarity index 93% rename from dev/assets/js/44.0ecd8b2f.js rename to dev/assets/js/44.70b34d5f.js index a622e46925..6365afe7c9 100644 --- a/dev/assets/js/44.0ecd8b2f.js +++ b/dev/assets/js/44.70b34d5f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{378:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTgateway_ESP8266_Addon_2G.8258b879.png"},441:function(t,e,a){"use strict";a.r(e);var r=a(14),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"gsm-2g-gateway"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#gsm-2g-gateway"}},[t._v("#")]),t._v(" GSM 2G gateway")]),t._v(" "),e("h2",{attrs:{id:"compatible-parts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#compatible-parts"}},[t._v("#")]),t._v(" Compatible parts")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Module")]),t._v(" "),e("th",[t._v("Purpose")]),t._v(" "),e("th",[t._v("Where to Buy")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("A6")]),t._v(" "),e("td",[t._v("GSM GPRS module")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("A7")]),t._v(" "),e("td",[t._v("GSM GPRS module with GPS")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])])])]),t._v(" "),e("h2",{attrs:{id:"hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#hardware-setup"}},[t._v("#")]),t._v(" Hardware setup")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Module Pin")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("NodeMCU / ESP8266 Pin")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("H_RXD")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D6")])]),t._v(" "),e("tr",[e("td",[t._v("H_TXD")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D7")])]),t._v(" "),e("tr",[e("td",[t._v("GND")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("GND")])]),t._v(" "),e("tr",[e("td",[t._v("VCC5")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("MOSFET driven by D5")])])])]),t._v(" "),e("p",[t._v("For VCC5 you can power it directly all the time with an USB cable or use a MOSFET like "),e("a",{attrs:{href:"https://gitlab.com/stavros/A6-ESP8266-breakout/raw/master/images/schematic.png",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),e("OutboundLink")],1)]),t._v(" "),e("p",[t._v("Don't use the nodemcu/wemos 5V pin for the A6/7 power, use a dedicated power supply for both or dedicated to the A6/7 with at least 2 amps ability.")]),t._v(" "),e("p",[t._v("So as to start your A6/7 module press the red button for 4 seconds, or link the PWR_KEY GPIO to VCC5.0 for the same time.")]),t._v(" "),e("p",[e("img",{attrs:{src:a(378),alt:"Addon_2G"}})])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{376:function(t,e,a){t.exports=a.p+"assets/img/OpenMQTTgateway_ESP8266_Addon_2G.8258b879.png"},439:function(t,e,a){"use strict";a.r(e);var r=a(14),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"gsm-2g-gateway"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#gsm-2g-gateway"}},[t._v("#")]),t._v(" GSM 2G gateway")]),t._v(" "),e("h2",{attrs:{id:"compatible-parts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#compatible-parts"}},[t._v("#")]),t._v(" Compatible parts")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Module")]),t._v(" "),e("th",[t._v("Purpose")]),t._v(" "),e("th",[t._v("Where to Buy")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("A6")]),t._v(" "),e("td",[t._v("GSM GPRS module")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])]),t._v(" "),e("tr",[e("td",[t._v("A7")]),t._v(" "),e("td",[t._v("GSM GPRS module with GPS")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),e("OutboundLink")],1)])])])]),t._v(" "),e("h2",{attrs:{id:"hardware-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#hardware-setup"}},[t._v("#")]),t._v(" Hardware setup")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Module Pin")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("NodeMCU / ESP8266 Pin")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("H_RXD")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D6")])]),t._v(" "),e("tr",[e("td",[t._v("H_TXD")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("D7")])]),t._v(" "),e("tr",[e("td",[t._v("GND")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("GND")])]),t._v(" "),e("tr",[e("td",[t._v("VCC5")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("MOSFET driven by D5")])])])]),t._v(" "),e("p",[t._v("For VCC5 you can power it directly all the time with an USB cable or use a MOSFET like "),e("a",{attrs:{href:"https://gitlab.com/stavros/A6-ESP8266-breakout/raw/master/images/schematic.png",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),e("OutboundLink")],1)]),t._v(" "),e("p",[t._v("Don't use the nodemcu/wemos 5V pin for the A6/7 power, use a dedicated power supply for both or dedicated to the A6/7 with at least 2 amps ability.")]),t._v(" "),e("p",[t._v("So as to start your A6/7 module press the red button for 4 seconds, or link the PWR_KEY GPIO to VCC5.0 for the same time.")]),t._v(" "),e("p",[e("img",{attrs:{src:a(376),alt:"Addon_2G"}})])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/45.049d7454.js b/dev/assets/js/45.52636278.js similarity index 99% rename from dev/assets/js/45.049d7454.js rename to dev/assets/js/45.52636278.js index eab16a7a89..7a2feeb5ef 100644 --- a/dev/assets/js/45.049d7454.js +++ b/dev/assets/js/45.52636278.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{400:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-OTA-Update-Home-Assistant.beaca92f.png"},455: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:"autodiscovery-compatible-with-openhab-default-false"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#autodiscovery-compatible-with-openhab-default-false"}},[e._v("#")]),e._v(" AutoDiscovery compatible with OpenHAB (default: false)")]),e._v(" "),t("p",[e._v("OpenHAB does not support the key "),t("code",[e._v("is_defined")]),e._v(" in the json template, to remove it at runtime and make the auto discovery compatible you can use the following command with a retain flag.")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"ohdisc":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 \'{"ohdisc":true, "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("This command can also be used with other controllers that does not support the is_defined key.")])]),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(400),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],{400:function(e,t,a){e.exports=a.p+"assets/img/OpenMQTTGateway-OTA-Update-Home-Assistant.beaca92f.png"},456: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:"autodiscovery-compatible-with-openhab-default-false"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#autodiscovery-compatible-with-openhab-default-false"}},[e._v("#")]),e._v(" AutoDiscovery compatible with OpenHAB (default: false)")]),e._v(" "),t("p",[e._v("OpenHAB does not support the key "),t("code",[e._v("is_defined")]),e._v(" in the json template, to remove it at runtime and make the auto discovery compatible you can use the following command with a retain flag.")]),e._v(" "),t("p",[t("code",[e._v('mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m \'{"ohdisc":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 \'{"ohdisc":true, "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("This command can also be used with other controllers that does not support the is_defined key.")])]),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(400),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/49.0ac9353c.js b/dev/assets/js/49.643a39ea.js similarity index 97% rename from dev/assets/js/49.0ac9353c.js rename to dev/assets/js/49.643a39ea.js index 8f3d20cc57..bd47506df8 100644 --- a/dev/assets/js/49.0ac9353c.js +++ b/dev/assets/js/49.643a39ea.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{427: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],{428: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.e50504fe.js b/dev/assets/js/50.aea49ba2.js similarity index 93% rename from dev/assets/js/50.e50504fe.js rename to dev/assets/js/50.aea49ba2.js index 2bbc0f1df7..a2016d9db2 100644 --- a/dev/assets/js/50.e50504fe.js +++ b/dev/assets/js/50.aea49ba2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{428: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],{427: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/52.f7daa8c4.js b/dev/assets/js/52.af989c17.js similarity index 97% rename from dev/assets/js/52.f7daa8c4.js rename to dev/assets/js/52.af989c17.js index 6007c80734..d0909446f4 100644 --- a/dev/assets/js/52.f7daa8c4.js +++ b/dev/assets/js/52.af989c17.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{430: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],{431: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/53.ddc70787.js b/dev/assets/js/53.302f5244.js similarity index 98% rename from dev/assets/js/53.ddc70787.js rename to dev/assets/js/53.302f5244.js index b90e632408..6c50e9a729 100644 --- a/dev/assets/js/53.ddc70787.js +++ b/dev/assets/js/53.302f5244.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{431:function(e,t,a){"use strict";a.r(t);var n=a(14),r=Object(n.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("p",[e._v("OpenMQTTGateway is not closed to one board or type of board, by using the power of the Arduino framework and libraries that are cross compatibles it let you many choice of hardware, from an ESP8266 to an ESP32.")]),e._v(" "),t("p",[e._v("You can take a look to the "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenMQTTGateway compatible website"),t("OutboundLink")],1),e._v(" to have a view of the "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/boards/",target:"_blank",rel:"noopener noreferrer"}},[e._v("supported boards"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Moreover the gateways capacities can be extended with sensors; DHT, HC SR501, ADC, I2C bus, INA226, MQ2, TEMT6000, TSL2561, BME280/BMP280, HTU21D, AHTx0, DS1820\nor actuators; LED, relays, PWM.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Running on a computer")]),e._v(" "),t("p",[e._v("If you want to use the BLE decoding capabilities of OpenMQTTGateway with a Raspberry Pi, Windows or Unix PC you can use "),t("a",{attrs:{href:"https://gateway.theengs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs Gateway"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Running on a tablet or phone")]),e._v(" "),t("p",[e._v("If you want to use the BLE decoding capabilities of OpenMQTTGateway with a tablet or smartphone you can use "),t("a",{attrs:{href:"https://app.theengs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs App"),t("OutboundLink")],1),e._v(".")])]),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 powerful 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:"/img/Theengs-Bridge-ble-gateway.png",alt:"Theengs bridge view"}})])]),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(" is available flashed with OpenMQTTGateway, and brings the functions below:")]),e._v(" "),t("ul",[t("li",[e._v("BLE to MQTT gateway, tens of Bluetooth devices 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:"/img/Theengs-Plug-OpenMQTTGateway.png",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("\nThe plug is available in North America only, other regions are planned.")]),e._v(" "),t("p",[e._v("Choosing your board depends heavily on the technologies you want to use with it.\nTo have a good overview of the compatibilities per board you can refer to the compatible modules attributes of each "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/boards/",target:"_blank",rel:"noopener noreferrer"}},[e._v("board"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("The choice between these boards will depend on your knowledge and your requirements in terms of reliability, situation, modules wanted and devices you already have. The table below present those (auto-generated)")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{432:function(e,t,a){"use strict";a.r(t);var n=a(14),r=Object(n.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("p",[e._v("OpenMQTTGateway is not closed to one board or type of board, by using the power of the Arduino framework and libraries that are cross compatibles it let you many choice of hardware, from an ESP8266 to an ESP32.")]),e._v(" "),t("p",[e._v("You can take a look to the "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenMQTTGateway compatible website"),t("OutboundLink")],1),e._v(" to have a view of the "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/boards/",target:"_blank",rel:"noopener noreferrer"}},[e._v("supported boards"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Moreover the gateways capacities can be extended with sensors; DHT, HC SR501, ADC, I2C bus, INA226, MQ2, TEMT6000, TSL2561, BME280/BMP280, HTU21D, AHTx0, DS1820\nor actuators; LED, relays, PWM.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Running on a computer")]),e._v(" "),t("p",[e._v("If you want to use the BLE decoding capabilities of OpenMQTTGateway with a Raspberry Pi, Windows or Unix PC you can use "),t("a",{attrs:{href:"https://gateway.theengs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs Gateway"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Running on a tablet or phone")]),e._v(" "),t("p",[e._v("If you want to use the BLE decoding capabilities of OpenMQTTGateway with a tablet or smartphone you can use "),t("a",{attrs:{href:"https://app.theengs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theengs App"),t("OutboundLink")],1),e._v(".")])]),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 powerful 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:"/img/Theengs-Bridge-ble-gateway.png",alt:"Theengs bridge view"}})])]),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(" is available flashed with OpenMQTTGateway, and brings the functions below:")]),e._v(" "),t("ul",[t("li",[e._v("BLE to MQTT gateway, tens of Bluetooth devices 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:"/img/Theengs-Plug-OpenMQTTGateway.png",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("\nThe plug is available in North America only, other regions are planned.")]),e._v(" "),t("p",[e._v("Choosing your board depends heavily on the technologies you want to use with it.\nTo have a good overview of the compatibilities per board you can refer to the compatible modules attributes of each "),t("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/boards/",target:"_blank",rel:"noopener noreferrer"}},[e._v("board"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("The choice between these boards will depend on your knowledge and your requirements in terms of reliability, situation, modules wanted and devices you already have. The table below present those (auto-generated)")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/54.9670b738.js b/dev/assets/js/54.5d90cc46.js similarity index 97% rename from dev/assets/js/54.9670b738.js rename to dev/assets/js/54.5d90cc46.js index b38de1d4b0..c0c367b321 100644 --- a/dev/assets/js/54.9670b738.js +++ b/dev/assets/js/54.5d90cc46.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{432: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:"broker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#broker"}},[e._v("#")]),e._v(" Broker")]),e._v(" "),t("p",[e._v("The broker will act as an intermediary between OpenMQTTGateway and your "),t("a",{attrs:{href:"/prerequisites/controller"}},[e._v("controller")]),e._v(", it can be seen as a centralized hub at the heart of your automation system. It carry on messages following a publish / subscribe mechanism.")]),e._v(" "),t("p",[e._v("All the events or commands could pass by the broker.")]),e._v(" "),t("p",[e._v("There are many choices of brokers, here are some of the most popular:")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://mosquitto.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mosquitto"),t("OutboundLink")],1),e._v(" (Open source)")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://moquette-io.github.io/moquette/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Moquette"),t("OutboundLink")],1),e._v(" (Open source)")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.emqx.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("EMQX"),t("OutboundLink")],1),e._v(" (Open Source)")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.hivemq.com/hivemq/features/",target:"_blank",rel:"noopener noreferrer"}},[e._v("HiveMQ"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Embedded MQTT brokers (Home Assistant and OpenHAB)")])]),e._v(" "),t("p",[e._v("This "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Comparison_of_MQTT_implementations",target:"_blank",rel:"noopener noreferrer"}},[e._v("wikipedia list"),t("OutboundLink")],1),e._v(" gives you more details about the different choices you have.\nThis "),t("a",{attrs:{href:"https://github.com/mqtt/mqtt.github.io/wiki/libraries",target:"_blank",rel:"noopener noreferrer"}},[e._v("github list"),t("OutboundLink")],1),e._v(" seems to be the most exhaustive ones.\nHere is also some "),t("a",{attrs:{href:"https://www.hivemq.com/blog/top-10-mqtt-broker-criteria/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ideas of criteria"),t("OutboundLink")],1),e._v(" from HiveMQ.")]),e._v(" "),t("p",[e._v("Once your broker is installed it can be interesting to see the traffic passing to it and to publish data, so as to do that there are several tools available:")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"http://mqtt-explorer.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MQTT Explorer"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/hivemq/hivemq-mqtt-web-client",target:"_blank",rel:"noopener noreferrer"}},[e._v("HIVE MQ Web client"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://mqttfx.jensd.de/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MQTT FX"),t("OutboundLink")],1)])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{433: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:"broker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#broker"}},[e._v("#")]),e._v(" Broker")]),e._v(" "),t("p",[e._v("The broker will act as an intermediary between OpenMQTTGateway and your "),t("a",{attrs:{href:"/prerequisites/controller"}},[e._v("controller")]),e._v(", it can be seen as a centralized hub at the heart of your automation system. It carry on messages following a publish / subscribe mechanism.")]),e._v(" "),t("p",[e._v("All the events or commands could pass by the broker.")]),e._v(" "),t("p",[e._v("There are many choices of brokers, here are some of the most popular:")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://mosquitto.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mosquitto"),t("OutboundLink")],1),e._v(" (Open source)")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://moquette-io.github.io/moquette/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Moquette"),t("OutboundLink")],1),e._v(" (Open source)")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.emqx.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("EMQX"),t("OutboundLink")],1),e._v(" (Open Source)")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.hivemq.com/hivemq/features/",target:"_blank",rel:"noopener noreferrer"}},[e._v("HiveMQ"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Embedded MQTT brokers (Home Assistant and OpenHAB)")])]),e._v(" "),t("p",[e._v("This "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Comparison_of_MQTT_implementations",target:"_blank",rel:"noopener noreferrer"}},[e._v("wikipedia list"),t("OutboundLink")],1),e._v(" gives you more details about the different choices you have.\nThis "),t("a",{attrs:{href:"https://github.com/mqtt/mqtt.github.io/wiki/libraries",target:"_blank",rel:"noopener noreferrer"}},[e._v("github list"),t("OutboundLink")],1),e._v(" seems to be the most exhaustive ones.\nHere is also some "),t("a",{attrs:{href:"https://www.hivemq.com/blog/top-10-mqtt-broker-criteria/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ideas of criteria"),t("OutboundLink")],1),e._v(" from HiveMQ.")]),e._v(" "),t("p",[e._v("Once your broker is installed it can be interesting to see the traffic passing to it and to publish data, so as to do that there are several tools available:")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"http://mqtt-explorer.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MQTT Explorer"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/hivemq/hivemq-mqtt-web-client",target:"_blank",rel:"noopener noreferrer"}},[e._v("HIVE MQ Web client"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://mqttfx.jensd.de/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MQTT FX"),t("OutboundLink")],1)])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/55.8a26f7bc.js b/dev/assets/js/55.fec354d5.js similarity index 98% rename from dev/assets/js/55.8a26f7bc.js rename to dev/assets/js/55.fec354d5.js index deadf46ee9..4e2b6e9f0a 100644 --- a/dev/assets/js/55.8a26f7bc.js +++ b/dev/assets/js/55.fec354d5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{436:function(t,e,a){"use strict";a.r(e);var n=a(14),r=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"parts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#parts"}},[t._v("#")]),t._v(" Parts")]),t._v(" "),e("p",[t._v("Depending on the gateway you would like to setup and your board, you may need extra parts/module to add.")]),t._v(" "),e("p",[t._v("You can take a look to the "),e("a",{attrs:{href:"https://compatible.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[t._v("OpenMQTTGateway compatible website"),e("OutboundLink")],1),t._v(" to have a view of the "),e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("supported parts"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("Here is below the main parts reference.")]),t._v(" "),e("h2",{attrs:{id:"main-parts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#main-parts"}},[t._v("#")]),t._v(" Main parts")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Parts")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("RF")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("IR")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("BLE")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("LoRa")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("GSM")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("SRX882 / STX882")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("X")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}}),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("CC1101")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("X")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("38KHz IR emitter and receiver")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("X")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("SX1276 / SX1278")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("X")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("A6/A7")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("X")])])])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("There is a wide range of parts available that may be compatible with OpenMQTTGateway, the ones "),e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("listed"),e("OutboundLink")],1),t._v(" are the ones tested and for which you can ask for support. Indeed for other parts we may not have it so as to reproduce the issue, or in the worst case they may not be compatible.")])])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{435:function(t,e,a){"use strict";a.r(e);var n=a(14),r=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"parts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#parts"}},[t._v("#")]),t._v(" Parts")]),t._v(" "),e("p",[t._v("Depending on the gateway you would like to setup and your board, you may need extra parts/module to add.")]),t._v(" "),e("p",[t._v("You can take a look to the "),e("a",{attrs:{href:"https://compatible.openmqttgateway.com",target:"_blank",rel:"noopener noreferrer"}},[t._v("OpenMQTTGateway compatible website"),e("OutboundLink")],1),t._v(" to have a view of the "),e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("supported parts"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("Here is below the main parts reference.")]),t._v(" "),e("h2",{attrs:{id:"main-parts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#main-parts"}},[t._v("#")]),t._v(" Main parts")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Parts")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("RF")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("IR")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("BLE")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("LoRa")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("GSM")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("SRX882 / STX882")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("X")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}}),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("CC1101")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("X")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("38KHz IR emitter and receiver")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("X")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("SX1276 / SX1278")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("X")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),e("tr",[e("td",[t._v("A6/A7")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("X")])])])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("There is a wide range of parts available that may be compatible with OpenMQTTGateway, the ones "),e("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("listed"),e("OutboundLink")],1),t._v(" are the ones tested and for which you can ask for support. Indeed for other parts we may not have it so as to reproduce the issue, or in the worst case they may not be compatible.")])])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/57.815469d8.js b/dev/assets/js/57.a706373d.js similarity index 93% rename from dev/assets/js/57.815469d8.js rename to dev/assets/js/57.a706373d.js index 4644695344..1c2a51dda7 100644 --- a/dev/assets/js/57.815469d8.js +++ b/dev/assets/js/57.a706373d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{440:function(t,a,e){"use strict";e.r(a);var r=e(14),o=Object(r.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:"compatible-parts"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#compatible-parts"}},[t._v("#")]),t._v(" Compatible parts")]),t._v(" "),a("p",[t._v("An ESP32 board with a LoRa module.\nIdeally a TTGO board with LoRa module included see "),a("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("With this kind of board there is no hardware modification needed.")])])}),[],!1,null,null,null);a.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{442:function(t,a,e){"use strict";e.r(a);var r=e(14),o=Object(r.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:"compatible-parts"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#compatible-parts"}},[t._v("#")]),t._v(" Compatible parts")]),t._v(" "),a("p",[t._v("An ESP32 board with a LoRa module.\nIdeally a TTGO board with LoRa module included see "),a("a",{attrs:{href:"https://compatible.openmqttgateway.com/index.php/parts",target:"_blank",rel:"noopener noreferrer"}},[t._v("compatible parts list"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("With this kind of board there is no hardware modification needed.")])])}),[],!1,null,null,null);a.default=o.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/59.14562eb3.js b/dev/assets/js/59.b437883c.js similarity index 99% rename from dev/assets/js/59.14562eb3.js rename to dev/assets/js/59.b437883c.js index 76eba00d57..5197e7ccb3 100644 --- a/dev/assets/js/59.14562eb3.js +++ b/dev/assets/js/59.b437883c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{445: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:"option-3-upload-your-configurations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#option-3-upload-your-configurations"}},[e._v("#")]),e._v(" (Option 3) Upload your configurations")]),e._v(" "),t("h2",{attrs:{id:"introduction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[e._v("#")]),e._v(" Introduction")]),e._v(" "),t("p",[e._v("This section is useful if you want to make an advanced project configuration not supported by the pre-built binaries.")]),e._v(" "),t("p",[e._v("Advanced configuration means changing the default pins, the MQTT topics, and all the expert parameters that you can find in "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/development/main/User_config.h",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("User_config.h")]),t("OutboundLink")],1),e._v(" and in all "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/tree/development/main",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("config_XX.h")]),t("OutboundLink")],1),e._v(" files. If you don't have to change the default parameters except Wi-Fi and MQTT broker settings, you don't need advanced configuration; you can go directly to the "),t("RouterLink",{attrs:{to:"/upload/binaries.html"}},[e._v("Upload Binaries")]),e._v(" section instead.")],1),e._v(" "),t("h2",{attrs:{id:"configure-upload-with-platformio"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configure-upload-with-platformio"}},[e._v("#")]),e._v(" Configure & Upload with PlatformIO")]),e._v(" "),t("ul",[t("li",[e._v("Download the "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/releases",target:"_blank",rel:"noopener noreferrer"}},[e._v("CODE"),t("OutboundLink")],1),e._v(" from github.")]),e._v(" "),t("li",[e._v("Open the "),t("code",[e._v("OpenMQTTGateway")]),e._v(" folder")])]),e._v(" "),t("p",[e._v("You will find inside the folder a "),t("code",[e._v("platformio.ini")]),e._v(" config file. PlatformIO uses this file to define how to build OMG for different kinds of hardware. Not just that, but it also specifies which modules to turn on and off. And there's more: it also lets you configure the settings of those modules.")]),e._v(" "),t("p",[e._v('PlatformIO config files work on the concept of overriding. At first, a very simple base "environment" is specified that specifies common variables shared by all situations:')]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("framework")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("arduino")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("lib_deps")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${libraries.picomqtt}\n ${libraries.arduinojson}\n ${libraries.arduinolog}\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("build_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n -w ; supress all warnings\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("; '-DLOG_LEVEL=LOG_LEVEL_TRACE' ; Enable trace level logging")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("monitor_speed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("115200")]),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("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br")])]),t("p",[e._v('Later "environments" get more specific, but inherit everything that was defined in this common environment:')]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("com-esp")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("lib_deps")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${env.lib_deps} ; Inherit all the library dependencies from [env]\n ${libraries.wifimanager} ; Add another library dependency on top of them\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("build_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${env.build_flags} ; Inherit all the build flags from [env]\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DsimpleReceiving")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("true' ; Add some of our own build flags")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZmqttDiscovery")]),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 "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";'-DCORE_DEBUG_LEVEL=4'")]),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("span",{staticClass:"line-number"},[e._v("9")]),t("br")])]),t("p",[e._v('Here, build flags starting with "-D" let us set configuration values you would normally find in '),t("code",[e._v("User_config.h")]),e._v(" and "),t("code",[e._v("config_xx.h")]),e._v(" files by specifying them here, overriding the default values set in those files. To include special characters, you can triple escape them with a backslash like so:")]),e._v(" "),t("div",{staticClass:"language-ini line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ini"}},[t("code",[e._v(" "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-Dwifi_password")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("\"Cato\\\\\\'sYounger\\\\\\$on\"' ; Cato'sYounger$on")]),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 different listed configurations in "),t("code",[e._v("platformio.ini")]),e._v(" represent some standard environments and boards. For example, the environment")]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env:nodemcuv2-pilight")]),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("sets the default settings for ESP8266 (NodeMCU v2) devices using the Plight module.")]),e._v(" "),t("h3",{attrs:{id:"option-a-creating-a-portable-config-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#option-a-creating-a-portable-config-file"}},[e._v("#")]),e._v(" "),t("em",[e._v("(Option A)")]),e._v(" Creating a portable config file")]),e._v(" "),t("p",[e._v("You could make your configuration changes directly by editing the values in "),t("code",[e._v("User_config.h")]),e._v(" (for main OMG settings) and "),t("code",[e._v("config_XX.h")]),e._v(" (for module-specific settings). You could also make most of those changes by instead writing some -D build flags in "),t("code",[e._v("platformio.ini")]),e._v(". But for maximum portability, a feature of PlatformIO allows you to make your configurations by creating a new file and listing all of your overrides there. This way, you can pull the latest OMG code changes without losing your configurations, or having to re-enter them manually.")]),e._v(" "),t("p",[e._v("To do this, create a file with a name ending in "),t("code",[e._v("_env.ini")]),e._v(", such as "),t("code",[e._v("production_env.ini")]),e._v(", into the root folder next to "),t("code",[e._v("platformio.ini")]),e._v(". PlatformIO will scan for all files ending in "),t("code",[e._v("_env.ini")]),e._v(" and use it to override the default values in "),t("code",[e._v("platformio.ini")]),e._v(".")]),e._v(" "),t("p",[e._v("At the top of your "),t("code",[e._v("*_env.ini")]),e._v(" file, for example, put the following to enable the ESP8266 (NodeMCU v2) with the Pilight module.")]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("platformio")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("default_envs")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("nodemcuv2-pilight")]),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("p",[e._v("This will make this environment the default environment for this PlatformIO project. If another environment isn't specified when building, it will default to this one.")]),e._v(" "),t("p",[e._v("For the rest of your config file, you can override the default configurations or add new configurations to existing environments in "),t("code",[e._v("platformio.ini")]),e._v(", or create a new environment. For example, if want to use both Pilight module and the BME280 module with an ESP8266, we can create a new environment. This is an example "),t("code",[e._v("my_env.ini")]),e._v(" file that creates two new environments:")]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("platformio")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("default_envs")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("nodemcuv2-pilight-bme280-ota")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env:nodemcuv2-pilight-bme280")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("extends")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("env:nodemcuv2-pilight")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("lib_deps")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${env:nodemcuv2-pilight.lib_deps}\n ${libraries.bme280}\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("build_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${env:nodemcuv2-pilight.build_flags}\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DGateway_Name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"OpenMQTTGateway"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZsensorBME280")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"BME280"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DBase_Topic")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"rf/"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DESPWifiManualSetup")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("true'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-Dwifi_ssid")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"mynetwork"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-Dwifi_password")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("\"Cato\\\\\\'sYounger\\\\\\$on\"' ; Cato'sYounger$on")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DMQTT_USER")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"mqttusername"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DMQTT_PASS")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"mqttpassword"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DMQTT_SERVER")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"mqttserver.local"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-Dgw_password")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"12345678"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DLED_RECEIVE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("LED_BUILTIN' ; Comment 1")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DLED_RECEIVE_ON")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("LOW' ; Comment 2")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DRF_RECEIVER_GPIO")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("13'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DRF_EMITTER_GPIO")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("15'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DsimpleReceiving")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("false'")]),e._v("\n '-UZmqttDiscovery' ; Disable HA discovery\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("monitor_speed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("115200")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env:nodemcuv2-pilight-bme280-ota")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("extends")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("env:nodemcuv2-pilight-bme280")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_protocol")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("espota")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_port")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("OpenMQTTGateway.local")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("--auth")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("otapassword")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("--port")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("8266")]),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("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("span",{staticClass:"line-number"},[e._v("24")]),t("br"),t("span",{staticClass:"line-number"},[e._v("25")]),t("br"),t("span",{staticClass:"line-number"},[e._v("26")]),t("br"),t("span",{staticClass:"line-number"},[e._v("27")]),t("br"),t("span",{staticClass:"line-number"},[e._v("28")]),t("br"),t("span",{staticClass:"line-number"},[e._v("29")]),t("br"),t("span",{staticClass:"line-number"},[e._v("30")]),t("br"),t("span",{staticClass:"line-number"},[e._v("31")]),t("br"),t("span",{staticClass:"line-number"},[e._v("32")]),t("br"),t("span",{staticClass:"line-number"},[e._v("33")]),t("br"),t("span",{staticClass:"line-number"},[e._v("34")]),t("br"),t("span",{staticClass:"line-number"},[e._v("35")]),t("br")])]),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("Adding manual WiFi and MQTT credentials to an environment also requires to define\n"),t("code",[e._v("'-DESPWifiManualSetup=true'")]),e._v("\nfor the credentials to be registered correctly.")])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("Manual network configuration (IP, netmask, gateway, DNS) requires to define\n"),t("code",[e._v("'-DNetworkAdvancedSetup=true'")]),e._v("\nand related network parameters, e.g.:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("'-DNET_IP=\"192.168.1.99\"'\n'-DNET_MASK=\"255.255.255.0\"'\n'-DNET_GW=\"192.168.1.1\"'\n'-DNET_DNS=\"1.1.1.1\"'\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("p",[e._v("The first new environment we create, "),t("code",[e._v("nodemcuv2-pilight-bme280")]),e._v(", inherits the default "),t("code",[e._v("nodemcuv2-pilight")]),e._v(" environment in "),t("code",[e._v("platformio.ini")]),e._v(" with the "),t("code",[e._v("extends = env:nodemcuv2-pilight")]),e._v(" line. In the "),t("code",[e._v("lib_deps")]),e._v(" section, it imports all the "),t("code",[e._v("lib_deps")]),e._v(" of "),t("code",[e._v("nodemcuv2-pilight")]),e._v(" with the "),t("code",[e._v("${env:nodemcuv2-pilight.lib_deps}")]),e._v(" line, and adds BME280 on top of it. (Since the environment we're extending already has this "),t("code",[e._v("lib_deps")]),e._v(" attribute, specifying it again would normally replace it completely with our new attribute; instead, to keep its value but simply append to it, we import the original in the beginning of our "),t("code",[e._v("lib_deps")]),e._v(" attribute.) In the "),t("code",[e._v("build_flags")]),e._v(" section, it again imports all the "),t("code",[e._v("build_flags")]),e._v(" of "),t("code",[e._v("nodemcuv2-pilight")]),e._v(" and many of its own overrides, e.g. changing "),t("code",[e._v("Base_Topic")]),e._v(" found in "),t("code",[e._v("User_config.h")]),e._v(' from the default to "rf/" by using the '),t("code",[e._v("'-DBase_Topic=\"rf/\"'")]),e._v(" line. It also unsets previously set configurations (i.e. "),t("code",[e._v("mqttDiscovery")]),e._v(") by using "),t("code",[e._v("'-UZmqttDiscovery'")]),e._v(". This environment will work over serial upload.")]),e._v(" "),t("p",[e._v("The second new environment, "),t("code",[e._v("nodemcuv2-pilight-bme280-ota")]),e._v(", inherits everything we specified in the first environment (with the line "),t("code",[e._v("extends = env:nodemcuv2-pilight-bme280")]),e._v("), but modifies it to upload over OTA (Wi-Fi). We also specified this as the "),t("code",[e._v("default_env")]),e._v(" in the beginning of the file, so PlatformIO will choose this environment to build and upload if we don't specify otherwise.")]),e._v(" "),t("p",[e._v("The first time we're flashing OMG to the board, we can use the command "),t("code",[e._v("pio run --target upload --environment nodemcuv2-pilight-bme280")]),e._v(" to specify that we want to build and run the "),t("code",[e._v("nodemcuv2-pilight-bme280")]),e._v(" environment (over USB serial). Afterwards, we don't have to specify "),t("code",[e._v("--environment")]),e._v(" (e.g. just run "),t("code",[e._v("pio run --target upload")]),e._v(") to run the default "),t("code",[e._v("nodemcuv2-pilight-bme280-ota")]),e._v(" environment and update the code over the air.")]),e._v(" "),t("h3",{attrs:{id:"option-b-editing-files-directly"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#option-b-editing-files-directly"}},[e._v("#")]),e._v(" "),t("em",[e._v("(Option B)")]),e._v(" Editing files directly")]),e._v(" "),t("p",[e._v("You can also modify the "),t("code",[e._v("User_config.h")]),e._v(" file and your modules' "),t("code",[e._v("config_XX.h")]),e._v(" files to your liking, and then edit the "),t("code",[e._v("platformio.ini")]),e._v(" file to uncomment the "),t("code",[e._v("default_envs")]),e._v(" lines corresponding to your board and chosen modules, like below:")]),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 comment"}},[e._v(";default_envs = sonoff-basic-rfr3")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";default_envs = rfbridge")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";default_envs = esp32dev-all")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("default_envs")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("esp32dev-rf")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";default_envs = esp32dev-ir")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";default_envs = esp32dev-ble")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";default_envs = ttgo-lora32-v1")]),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("p",[e._v("If you don't know which "),t("code",[e._v("env")]),e._v(" to activate, you can refer to "),t("a",{attrs:{href:"../prerequisites/devices"}},[e._v("devices")]),e._v(".")]),e._v(" "),t("p",[e._v("If you want to add more sensors or gateways to one "),t("code",[e._v("default_envs")]),e._v(" you can add the modules directly into your environment definition of your "),t("code",[e._v(".ini")]),e._v(" files or uncomment them in "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/d2dd6138558909b71cc44f69665340247bd5f356/main/User_config.h#L84",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("User_config.h")]),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Example to add IR to "),t("code",[e._v("esp32dev-rf")]),e._v(" add the "),t("code",[e._v("build_flags")]),e._v(" below to the env definition:")]),e._v(" "),t("div",{staticClass:"language-ini line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ini"}},[t("code",[e._v(" "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZgatewayIR")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"IR"\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env:esp32dev-rf")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("platform")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("${com.esp32_platform}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("board")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("esp32dev")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("lib_deps")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${com-esp.lib_deps}\n ${libraries.rc-switch}\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("build_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${com-esp.build_flags}\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZgatewayRF")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"RF"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZgatewayIR")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"IR"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DGateway_Name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"OpenMQTTGateway_ESP32_RF_IR"\'')]),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("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("p",[e._v("Once your configuration is done you can upload the program to your board by clicking on the white arrow at the blue bottom bar of your PIO editor or with the following command:\n"),t("code",[e._v("pio run --target upload")])]),e._v(" "),t("p",[e._v("PIO will download the necessaries platform and libraries with the correct versions, build the code and upload it.")]),e._v(" "),t("p",[e._v("If you encounter errors the first thing to do is to clean your environment by using the white dust bin in the blue bottom bar of your PIO editor or with the following command:\n"),t("code",[e._v("pio run --target clean")])]),e._v(" "),t("p",[e._v("With some ESP it could be necessary to push the reset button when the upload begin.")]),e._v(" "),t("p",[e._v("If you want to erase the settings stored in the ESP memory use:\n"),t("code",[e._v("pio run --target erase")]),e._v("\nThis can be useful especially before the first upload or when you change the board partitions sizing.")]),e._v(" "),t("p",[e._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:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("home/OpenMQTTGateway/LWT Online\nhome/OpenMQTTGateway/version\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("With PIO you can also upload the firmware through Over the Air, so as to do that you can add the upload options flags used below, "),t("code",[e._v("upload_port")]),e._v(" is the IP address of your ESP:")]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env:esp32-ble")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("platform")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("${com.esp32_platform}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("board")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("esp32dev")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("board_build.partitions")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("min_spiffs.csv")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("lib_deps")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${com-esp.lib_deps}\n ${libraries.ble}\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("build_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${com-esp.build_flags}\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZgatewayBT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"BT"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DGateway_Name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"OpenMQTTGateway_ESP32"\'')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_protocol")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("espota")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_port")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("192.168.1.22")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("--auth")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("OTAPASSWORD")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("--port")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("8266")]),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("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("h2",{attrs:{id:"api"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#api"}},[e._v("#")]),e._v(" API")]),e._v(" "),t("p",[e._v("With the V0.9 we added the support of json for receiving and publishing.\nPer default Json reception and Json publication is activated, the previous simple reception mode is also activated to avoid regression on commands.")]),e._v(" "),t("p",[e._v("You can deactivate Json or simple mode following theses instructions:")]),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("define")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token macro-name"}},[e._v("jsonPublishing")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v(" ")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//define false if you don't want to use Json publishing (one topic for all the parameters)")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v('//example home/OpenMQTTGateway_ESP32_DEVKIT/BTtoMQTT/4XXXXXXXXXX4 {"rssi":-63,"servicedata":"fe0000000000000000000000000000000000000000"}')]),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("simplePublishing")]),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 if you want to use simple publishing (one topic for one parameter)")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//example")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("// home/OpenMQTTGateway_ESP32_DEVKIT/BTtoMQTT/4XXXXXXXXXX4/rssi -63.0")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("// home/OpenMQTTGateway_ESP32_DEVKIT/BTtoMQTT/4XXXXXXXXXX4/servicedata fe0000000000000000000000000000000000000000")]),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("simpleReceiving")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v(" ")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//define false if you don't want to use old way reception analysis")])]),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("jsonReceiving")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v(" ")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//define false if you don't want to use Json reception analysis")])]),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("p",[e._v("If you are using platformio you can also comment the definitions above and define your parameters into platformio.ini file by setting the following "),t("code",[e._v("build_flags")]),e._v(":")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[e._v(" "),t("span",{pre:!0,attrs:{class:"token char"}},[e._v("'-DjsonPublishing=true'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token char"}},[e._v("'-DjsonReceiving=true'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token char"}},[e._v("'-DsimpleReceiving=true'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token char"}},[e._v("'-DsimplePublishing=true'")]),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("Note that depending on the environment the default platformio.ini has common option defined see sections:")]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("com-arduino")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("com-esp")]),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("p",[e._v("If you want to use HASS MQTT discovery you need to have\n"),t("code",[e._v("#define jsonPublishing true")]),e._v("\n&\n"),t("code",[e._v('#define ZmqttDiscovery "HADiscovery"')]),e._v("\nuncommented.\nAdded to that auto discovery box should be selected into your Home Assistant MQTT integration configuration.")]),e._v(" "),t("p",[e._v("With an ESP if you did not set your network and MQTT parameters manually you can now open the "),t("RouterLink",{attrs:{to:"/upload/portal.html"}},[e._v("web portal configuration")]),e._v(".")],1),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("simpleReceiving on Arduino boards doesn't accept 64 bits MQTT values, you can only send 32bits values from the MQTT broker.")])]),e._v(" "),t("p",[t("a",{attrs:{href:"https://hits.seeyoufarm.com",target:"_blank",rel:"noopener noreferrer"}},[t("img",{attrs:{src:"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fdocs.openmqttgateway.com%2Fupload%2Fbuilds.html&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false",alt:"Hits"}}),t("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{447: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:"option-3-upload-your-configurations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#option-3-upload-your-configurations"}},[e._v("#")]),e._v(" (Option 3) Upload your configurations")]),e._v(" "),t("h2",{attrs:{id:"introduction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[e._v("#")]),e._v(" Introduction")]),e._v(" "),t("p",[e._v("This section is useful if you want to make an advanced project configuration not supported by the pre-built binaries.")]),e._v(" "),t("p",[e._v("Advanced configuration means changing the default pins, the MQTT topics, and all the expert parameters that you can find in "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/development/main/User_config.h",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("User_config.h")]),t("OutboundLink")],1),e._v(" and in all "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/tree/development/main",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("config_XX.h")]),t("OutboundLink")],1),e._v(" files. If you don't have to change the default parameters except Wi-Fi and MQTT broker settings, you don't need advanced configuration; you can go directly to the "),t("RouterLink",{attrs:{to:"/upload/binaries.html"}},[e._v("Upload Binaries")]),e._v(" section instead.")],1),e._v(" "),t("h2",{attrs:{id:"configure-upload-with-platformio"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configure-upload-with-platformio"}},[e._v("#")]),e._v(" Configure & Upload with PlatformIO")]),e._v(" "),t("ul",[t("li",[e._v("Download the "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/releases",target:"_blank",rel:"noopener noreferrer"}},[e._v("CODE"),t("OutboundLink")],1),e._v(" from github.")]),e._v(" "),t("li",[e._v("Open the "),t("code",[e._v("OpenMQTTGateway")]),e._v(" folder")])]),e._v(" "),t("p",[e._v("You will find inside the folder a "),t("code",[e._v("platformio.ini")]),e._v(" config file. PlatformIO uses this file to define how to build OMG for different kinds of hardware. Not just that, but it also specifies which modules to turn on and off. And there's more: it also lets you configure the settings of those modules.")]),e._v(" "),t("p",[e._v('PlatformIO config files work on the concept of overriding. At first, a very simple base "environment" is specified that specifies common variables shared by all situations:')]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("framework")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("arduino")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("lib_deps")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${libraries.picomqtt}\n ${libraries.arduinojson}\n ${libraries.arduinolog}\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("build_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n -w ; supress all warnings\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("; '-DLOG_LEVEL=LOG_LEVEL_TRACE' ; Enable trace level logging")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("monitor_speed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("115200")]),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("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br")])]),t("p",[e._v('Later "environments" get more specific, but inherit everything that was defined in this common environment:')]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("com-esp")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("lib_deps")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${env.lib_deps} ; Inherit all the library dependencies from [env]\n ${libraries.wifimanager} ; Add another library dependency on top of them\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("build_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${env.build_flags} ; Inherit all the build flags from [env]\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DsimpleReceiving")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("true' ; Add some of our own build flags")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZmqttDiscovery")]),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 "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";'-DCORE_DEBUG_LEVEL=4'")]),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("span",{staticClass:"line-number"},[e._v("9")]),t("br")])]),t("p",[e._v('Here, build flags starting with "-D" let us set configuration values you would normally find in '),t("code",[e._v("User_config.h")]),e._v(" and "),t("code",[e._v("config_xx.h")]),e._v(" files by specifying them here, overriding the default values set in those files. To include special characters, you can triple escape them with a backslash like so:")]),e._v(" "),t("div",{staticClass:"language-ini line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ini"}},[t("code",[e._v(" "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-Dwifi_password")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("\"Cato\\\\\\'sYounger\\\\\\$on\"' ; Cato'sYounger$on")]),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 different listed configurations in "),t("code",[e._v("platformio.ini")]),e._v(" represent some standard environments and boards. For example, the environment")]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env:nodemcuv2-pilight")]),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("sets the default settings for ESP8266 (NodeMCU v2) devices using the Plight module.")]),e._v(" "),t("h3",{attrs:{id:"option-a-creating-a-portable-config-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#option-a-creating-a-portable-config-file"}},[e._v("#")]),e._v(" "),t("em",[e._v("(Option A)")]),e._v(" Creating a portable config file")]),e._v(" "),t("p",[e._v("You could make your configuration changes directly by editing the values in "),t("code",[e._v("User_config.h")]),e._v(" (for main OMG settings) and "),t("code",[e._v("config_XX.h")]),e._v(" (for module-specific settings). You could also make most of those changes by instead writing some -D build flags in "),t("code",[e._v("platformio.ini")]),e._v(". But for maximum portability, a feature of PlatformIO allows you to make your configurations by creating a new file and listing all of your overrides there. This way, you can pull the latest OMG code changes without losing your configurations, or having to re-enter them manually.")]),e._v(" "),t("p",[e._v("To do this, create a file with a name ending in "),t("code",[e._v("_env.ini")]),e._v(", such as "),t("code",[e._v("production_env.ini")]),e._v(", into the root folder next to "),t("code",[e._v("platformio.ini")]),e._v(". PlatformIO will scan for all files ending in "),t("code",[e._v("_env.ini")]),e._v(" and use it to override the default values in "),t("code",[e._v("platformio.ini")]),e._v(".")]),e._v(" "),t("p",[e._v("At the top of your "),t("code",[e._v("*_env.ini")]),e._v(" file, for example, put the following to enable the ESP8266 (NodeMCU v2) with the Pilight module.")]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("platformio")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("default_envs")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("nodemcuv2-pilight")]),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("p",[e._v("This will make this environment the default environment for this PlatformIO project. If another environment isn't specified when building, it will default to this one.")]),e._v(" "),t("p",[e._v("For the rest of your config file, you can override the default configurations or add new configurations to existing environments in "),t("code",[e._v("platformio.ini")]),e._v(", or create a new environment. For example, if want to use both Pilight module and the BME280 module with an ESP8266, we can create a new environment. This is an example "),t("code",[e._v("my_env.ini")]),e._v(" file that creates two new environments:")]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("platformio")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("default_envs")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("nodemcuv2-pilight-bme280-ota")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env:nodemcuv2-pilight-bme280")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("extends")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("env:nodemcuv2-pilight")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("lib_deps")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${env:nodemcuv2-pilight.lib_deps}\n ${libraries.bme280}\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("build_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${env:nodemcuv2-pilight.build_flags}\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DGateway_Name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"OpenMQTTGateway"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZsensorBME280")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"BME280"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DBase_Topic")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"rf/"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DESPWifiManualSetup")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("true'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-Dwifi_ssid")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"mynetwork"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-Dwifi_password")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("\"Cato\\\\\\'sYounger\\\\\\$on\"' ; Cato'sYounger$on")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DMQTT_USER")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"mqttusername"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DMQTT_PASS")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"mqttpassword"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DMQTT_SERVER")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"mqttserver.local"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-Dgw_password")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"12345678"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DLED_RECEIVE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("LED_BUILTIN' ; Comment 1")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DLED_RECEIVE_ON")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("LOW' ; Comment 2")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DRF_RECEIVER_GPIO")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("13'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DRF_EMITTER_GPIO")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("15'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DsimpleReceiving")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("false'")]),e._v("\n '-UZmqttDiscovery' ; Disable HA discovery\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("monitor_speed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("115200")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env:nodemcuv2-pilight-bme280-ota")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("extends")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("env:nodemcuv2-pilight-bme280")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_protocol")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("espota")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_port")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("OpenMQTTGateway.local")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("--auth")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("otapassword")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("--port")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("8266")]),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("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("span",{staticClass:"line-number"},[e._v("24")]),t("br"),t("span",{staticClass:"line-number"},[e._v("25")]),t("br"),t("span",{staticClass:"line-number"},[e._v("26")]),t("br"),t("span",{staticClass:"line-number"},[e._v("27")]),t("br"),t("span",{staticClass:"line-number"},[e._v("28")]),t("br"),t("span",{staticClass:"line-number"},[e._v("29")]),t("br"),t("span",{staticClass:"line-number"},[e._v("30")]),t("br"),t("span",{staticClass:"line-number"},[e._v("31")]),t("br"),t("span",{staticClass:"line-number"},[e._v("32")]),t("br"),t("span",{staticClass:"line-number"},[e._v("33")]),t("br"),t("span",{staticClass:"line-number"},[e._v("34")]),t("br"),t("span",{staticClass:"line-number"},[e._v("35")]),t("br")])]),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("Adding manual WiFi and MQTT credentials to an environment also requires to define\n"),t("code",[e._v("'-DESPWifiManualSetup=true'")]),e._v("\nfor the credentials to be registered correctly.")])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("Manual network configuration (IP, netmask, gateway, DNS) requires to define\n"),t("code",[e._v("'-DNetworkAdvancedSetup=true'")]),e._v("\nand related network parameters, e.g.:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("'-DNET_IP=\"192.168.1.99\"'\n'-DNET_MASK=\"255.255.255.0\"'\n'-DNET_GW=\"192.168.1.1\"'\n'-DNET_DNS=\"1.1.1.1\"'\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("p",[e._v("The first new environment we create, "),t("code",[e._v("nodemcuv2-pilight-bme280")]),e._v(", inherits the default "),t("code",[e._v("nodemcuv2-pilight")]),e._v(" environment in "),t("code",[e._v("platformio.ini")]),e._v(" with the "),t("code",[e._v("extends = env:nodemcuv2-pilight")]),e._v(" line. In the "),t("code",[e._v("lib_deps")]),e._v(" section, it imports all the "),t("code",[e._v("lib_deps")]),e._v(" of "),t("code",[e._v("nodemcuv2-pilight")]),e._v(" with the "),t("code",[e._v("${env:nodemcuv2-pilight.lib_deps}")]),e._v(" line, and adds BME280 on top of it. (Since the environment we're extending already has this "),t("code",[e._v("lib_deps")]),e._v(" attribute, specifying it again would normally replace it completely with our new attribute; instead, to keep its value but simply append to it, we import the original in the beginning of our "),t("code",[e._v("lib_deps")]),e._v(" attribute.) In the "),t("code",[e._v("build_flags")]),e._v(" section, it again imports all the "),t("code",[e._v("build_flags")]),e._v(" of "),t("code",[e._v("nodemcuv2-pilight")]),e._v(" and many of its own overrides, e.g. changing "),t("code",[e._v("Base_Topic")]),e._v(" found in "),t("code",[e._v("User_config.h")]),e._v(' from the default to "rf/" by using the '),t("code",[e._v("'-DBase_Topic=\"rf/\"'")]),e._v(" line. It also unsets previously set configurations (i.e. "),t("code",[e._v("mqttDiscovery")]),e._v(") by using "),t("code",[e._v("'-UZmqttDiscovery'")]),e._v(". This environment will work over serial upload.")]),e._v(" "),t("p",[e._v("The second new environment, "),t("code",[e._v("nodemcuv2-pilight-bme280-ota")]),e._v(", inherits everything we specified in the first environment (with the line "),t("code",[e._v("extends = env:nodemcuv2-pilight-bme280")]),e._v("), but modifies it to upload over OTA (Wi-Fi). We also specified this as the "),t("code",[e._v("default_env")]),e._v(" in the beginning of the file, so PlatformIO will choose this environment to build and upload if we don't specify otherwise.")]),e._v(" "),t("p",[e._v("The first time we're flashing OMG to the board, we can use the command "),t("code",[e._v("pio run --target upload --environment nodemcuv2-pilight-bme280")]),e._v(" to specify that we want to build and run the "),t("code",[e._v("nodemcuv2-pilight-bme280")]),e._v(" environment (over USB serial). Afterwards, we don't have to specify "),t("code",[e._v("--environment")]),e._v(" (e.g. just run "),t("code",[e._v("pio run --target upload")]),e._v(") to run the default "),t("code",[e._v("nodemcuv2-pilight-bme280-ota")]),e._v(" environment and update the code over the air.")]),e._v(" "),t("h3",{attrs:{id:"option-b-editing-files-directly"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#option-b-editing-files-directly"}},[e._v("#")]),e._v(" "),t("em",[e._v("(Option B)")]),e._v(" Editing files directly")]),e._v(" "),t("p",[e._v("You can also modify the "),t("code",[e._v("User_config.h")]),e._v(" file and your modules' "),t("code",[e._v("config_XX.h")]),e._v(" files to your liking, and then edit the "),t("code",[e._v("platformio.ini")]),e._v(" file to uncomment the "),t("code",[e._v("default_envs")]),e._v(" lines corresponding to your board and chosen modules, like below:")]),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 comment"}},[e._v(";default_envs = sonoff-basic-rfr3")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";default_envs = rfbridge")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";default_envs = esp32dev-all")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("default_envs")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("esp32dev-rf")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";default_envs = esp32dev-ir")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";default_envs = esp32dev-ble")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v(";default_envs = ttgo-lora32-v1")]),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("p",[e._v("If you don't know which "),t("code",[e._v("env")]),e._v(" to activate, you can refer to "),t("a",{attrs:{href:"../prerequisites/devices"}},[e._v("devices")]),e._v(".")]),e._v(" "),t("p",[e._v("If you want to add more sensors or gateways to one "),t("code",[e._v("default_envs")]),e._v(" you can add the modules directly into your environment definition of your "),t("code",[e._v(".ini")]),e._v(" files or uncomment them in "),t("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/d2dd6138558909b71cc44f69665340247bd5f356/main/User_config.h#L84",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("User_config.h")]),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Example to add IR to "),t("code",[e._v("esp32dev-rf")]),e._v(" add the "),t("code",[e._v("build_flags")]),e._v(" below to the env definition:")]),e._v(" "),t("div",{staticClass:"language-ini line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-ini"}},[t("code",[e._v(" "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZgatewayIR")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"IR"\'')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env:esp32dev-rf")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("platform")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("${com.esp32_platform}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("board")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("esp32dev")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("lib_deps")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${com-esp.lib_deps}\n ${libraries.rc-switch}\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("build_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${com-esp.build_flags}\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZgatewayRF")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"RF"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZgatewayIR")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"IR"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DGateway_Name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"OpenMQTTGateway_ESP32_RF_IR"\'')]),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("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("p",[e._v("Once your configuration is done you can upload the program to your board by clicking on the white arrow at the blue bottom bar of your PIO editor or with the following command:\n"),t("code",[e._v("pio run --target upload")])]),e._v(" "),t("p",[e._v("PIO will download the necessaries platform and libraries with the correct versions, build the code and upload it.")]),e._v(" "),t("p",[e._v("If you encounter errors the first thing to do is to clean your environment by using the white dust bin in the blue bottom bar of your PIO editor or with the following command:\n"),t("code",[e._v("pio run --target clean")])]),e._v(" "),t("p",[e._v("With some ESP it could be necessary to push the reset button when the upload begin.")]),e._v(" "),t("p",[e._v("If you want to erase the settings stored in the ESP memory use:\n"),t("code",[e._v("pio run --target erase")]),e._v("\nThis can be useful especially before the first upload or when you change the board partitions sizing.")]),e._v(" "),t("p",[e._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:")]),e._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("home/OpenMQTTGateway/LWT Online\nhome/OpenMQTTGateway/version\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("With PIO you can also upload the firmware through Over the Air, so as to do that you can add the upload options flags used below, "),t("code",[e._v("upload_port")]),e._v(" is the IP address of your ESP:")]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("env:esp32-ble")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("platform")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("${com.esp32_platform}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("board")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("esp32dev")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("board_build.partitions")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("min_spiffs.csv")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("lib_deps")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${com-esp.lib_deps}\n ${libraries.ble}\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("build_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n ${com-esp.build_flags}\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DZgatewayBT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"BT"\'')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("'-DGateway_Name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v('"OpenMQTTGateway_ESP32"\'')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_protocol")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("espota")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_port")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("192.168.1.22")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("upload_flags")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("--auth")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("OTAPASSWORD")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key attr-name"}},[e._v("--port")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token value attr-value"}},[e._v("8266")]),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("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("h2",{attrs:{id:"api"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#api"}},[e._v("#")]),e._v(" API")]),e._v(" "),t("p",[e._v("With the V0.9 we added the support of json for receiving and publishing.\nPer default Json reception and Json publication is activated, the previous simple reception mode is also activated to avoid regression on commands.")]),e._v(" "),t("p",[e._v("You can deactivate Json or simple mode following theses instructions:")]),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("define")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token macro-name"}},[e._v("jsonPublishing")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v(" ")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//define false if you don't want to use Json publishing (one topic for all the parameters)")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v('//example home/OpenMQTTGateway_ESP32_DEVKIT/BTtoMQTT/4XXXXXXXXXX4 {"rssi":-63,"servicedata":"fe0000000000000000000000000000000000000000"}')]),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("simplePublishing")]),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 if you want to use simple publishing (one topic for one parameter)")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//example")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("// home/OpenMQTTGateway_ESP32_DEVKIT/BTtoMQTT/4XXXXXXXXXX4/rssi -63.0")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("// home/OpenMQTTGateway_ESP32_DEVKIT/BTtoMQTT/4XXXXXXXXXX4/servicedata fe0000000000000000000000000000000000000000")]),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("simpleReceiving")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v(" ")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//define false if you don't want to use old way reception analysis")])]),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("jsonReceiving")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token expression"}},[t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v(" ")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//define false if you don't want to use Json reception analysis")])]),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("p",[e._v("If you are using platformio you can also comment the definitions above and define your parameters into platformio.ini file by setting the following "),t("code",[e._v("build_flags")]),e._v(":")]),e._v(" "),t("div",{staticClass:"language-cpp line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-cpp"}},[t("code",[e._v(" "),t("span",{pre:!0,attrs:{class:"token char"}},[e._v("'-DjsonPublishing=true'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token char"}},[e._v("'-DjsonReceiving=true'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token char"}},[e._v("'-DsimpleReceiving=true'")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token char"}},[e._v("'-DsimplePublishing=true'")]),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("Note that depending on the environment the default platformio.ini has common option defined see sections:")]),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 section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("com-arduino")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token section"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token section-name selector"}},[e._v("com-esp")]),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("p",[e._v("If you want to use HASS MQTT discovery you need to have\n"),t("code",[e._v("#define jsonPublishing true")]),e._v("\n&\n"),t("code",[e._v('#define ZmqttDiscovery "HADiscovery"')]),e._v("\nuncommented.\nAdded to that auto discovery box should be selected into your Home Assistant MQTT integration configuration.")]),e._v(" "),t("p",[e._v("With an ESP if you did not set your network and MQTT parameters manually you can now open the "),t("RouterLink",{attrs:{to:"/upload/portal.html"}},[e._v("web portal configuration")]),e._v(".")],1),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("simpleReceiving on Arduino boards doesn't accept 64 bits MQTT values, you can only send 32bits values from the MQTT broker.")])]),e._v(" "),t("p",[t("a",{attrs:{href:"https://hits.seeyoufarm.com",target:"_blank",rel:"noopener noreferrer"}},[t("img",{attrs:{src:"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fdocs.openmqttgateway.com%2Fupload%2Fbuilds.html&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false",alt:"Hits"}}),t("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/60.176e9224.js b/dev/assets/js/60.77c8b62b.js similarity index 99% rename from dev/assets/js/60.176e9224.js rename to dev/assets/js/60.77c8b62b.js index d73fa558f3..f37e182449 100644 --- a/dev/assets/js/60.176e9224.js +++ b/dev/assets/js/60.77c8b62b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{452: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],{449: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/61.4338755a.js b/dev/assets/js/61.0f1b5ffa.js similarity index 98% rename from dev/assets/js/61.4338755a.js rename to dev/assets/js/61.0f1b5ffa.js index 4778ecd6e3..9587962424 100644 --- a/dev/assets/js/61.4338755a.js +++ b/dev/assets/js/61.0f1b5ffa.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{449:function(t,e,o){"use strict";o.r(e);var r=o(14),a=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"option-1-upload-from-the-web"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#option-1-upload-from-the-web"}},[t._v("#")]),t._v(" (Option 1) Upload from the web")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://hits.seeyoufarm.com",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fdocs.openmqttgateway.com%2Fupload%2Fweb-install.html&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false",alt:"Hits"}}),e("OutboundLink")],1)]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("Running on a tablet or phone")]),t._v(" "),e("p",[t._v("If you want to use the BLE decoding capabilities of OpenMQTTGateway with a tablet or smartphone you can use "),e("a",{attrs:{href:"https://app.theengs.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Theengs App"),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),e("p",[t._v("If you are on macOS and have a LilyGo LoRa32 V2.1 board, make sure you have the "),e("a",{attrs:{href:"https://github.com/WCHSoftGroup/ch34xser_macos",target:"_blank",rel:"noopener noreferrer"}},[t._v("correct driver for the CH9102 Serial Chip"),e("OutboundLink")],1),t._v(" installed and selected in the popup when initiating the web install.\nTo finalise the driver installation don't forget the confirmation in the "),e("strong",[t._v("Security")]),t._v(" section of "),e("strong",[t._v("System Preferences")]),t._v(" after the restart.\nThe correct driver to then select in the popup of this web install is\n"),e("code",[t._v("/dev/cu.wchusbserialXXXXXXXXXXX")])])]),t._v(" "),e("p",[t._v("You can upload the firmware to your ESP device directly from here.")]),t._v(" "),e("ol",[e("li",[t._v("Plug in your ESP to a USB port.")]),t._v(" "),e("li",[t._v("Select the firmware in the box below.")]),t._v(" "),e("li",[t._v("Click the install button and choose the port that the ESP is connected to.")]),t._v(" "),e("li",[t._v("Wait until the process is complete.")]),t._v(" "),e("li",[t._v("Once completed you can configure your "),e("RouterLink",{attrs:{to:"/upload/portal.html"}},[t._v("WiFi and MQTT credentials")])],1)]),t._v(" "),e("web-uploader"),t._v(" "),e("p",[t._v("Upload powered by "),e("a",{attrs:{href:"https://esphome.github.io/esp-web-tools/",target:"_blank",rel:"noopener noreferrer"}},[t._v("ESP Web Tools"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"using-openmqttgateway"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#using-openmqttgateway"}},[t._v("#")]),t._v(" Using OpenMQTTGateway ?")]),t._v(" "),e("p",[t._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.")]),t._v(" "),e("div",{staticStyle:{"text-align":"center"}},[e("iframe",{staticStyle:{border:"0","border-radius":"6px"},attrs:{src:"https://github.com/sponsors/theengs/button",title:"Sponsor Theengs",height:"32",width:"228"}})]),t._v(" "),e("h2",{attrs:{id:"environments-characteristics"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#environments-characteristics"}},[t._v("#")]),t._v(" Environments characteristics")]),t._v(" "),e("p",[t._v("The auto-generated table below describes the libraries and the modules of each board configuration.")])],1)}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{451:function(t,e,o){"use strict";o.r(e);var r=o(14),a=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"option-1-upload-from-the-web"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#option-1-upload-from-the-web"}},[t._v("#")]),t._v(" (Option 1) Upload from the web")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://hits.seeyoufarm.com",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fdocs.openmqttgateway.com%2Fupload%2Fweb-install.html&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false",alt:"Hits"}}),e("OutboundLink")],1)]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("Running on a tablet or phone")]),t._v(" "),e("p",[t._v("If you want to use the BLE decoding capabilities of OpenMQTTGateway with a tablet or smartphone you can use "),e("a",{attrs:{href:"https://app.theengs.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Theengs App"),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),e("p",[t._v("If you are on macOS and have a LilyGo LoRa32 V2.1 board, make sure you have the "),e("a",{attrs:{href:"https://github.com/WCHSoftGroup/ch34xser_macos",target:"_blank",rel:"noopener noreferrer"}},[t._v("correct driver for the CH9102 Serial Chip"),e("OutboundLink")],1),t._v(" installed and selected in the popup when initiating the web install.\nTo finalise the driver installation don't forget the confirmation in the "),e("strong",[t._v("Security")]),t._v(" section of "),e("strong",[t._v("System Preferences")]),t._v(" after the restart.\nThe correct driver to then select in the popup of this web install is\n"),e("code",[t._v("/dev/cu.wchusbserialXXXXXXXXXXX")])])]),t._v(" "),e("p",[t._v("You can upload the firmware to your ESP device directly from here.")]),t._v(" "),e("ol",[e("li",[t._v("Plug in your ESP to a USB port.")]),t._v(" "),e("li",[t._v("Select the firmware in the box below.")]),t._v(" "),e("li",[t._v("Click the install button and choose the port that the ESP is connected to.")]),t._v(" "),e("li",[t._v("Wait until the process is complete.")]),t._v(" "),e("li",[t._v("Once completed you can configure your "),e("RouterLink",{attrs:{to:"/upload/portal.html"}},[t._v("WiFi and MQTT credentials")])],1)]),t._v(" "),e("web-uploader"),t._v(" "),e("p",[t._v("Upload powered by "),e("a",{attrs:{href:"https://esphome.github.io/esp-web-tools/",target:"_blank",rel:"noopener noreferrer"}},[t._v("ESP Web Tools"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"using-openmqttgateway"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#using-openmqttgateway"}},[t._v("#")]),t._v(" Using OpenMQTTGateway ?")]),t._v(" "),e("p",[t._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.")]),t._v(" "),e("div",{staticStyle:{"text-align":"center"}},[e("iframe",{staticStyle:{border:"0","border-radius":"6px"},attrs:{src:"https://github.com/sponsors/theengs/button",title:"Sponsor Theengs",height:"32",width:"228"}})]),t._v(" "),e("h2",{attrs:{id:"environments-characteristics"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#environments-characteristics"}},[t._v("#")]),t._v(" Environments characteristics")]),t._v(" "),e("p",[t._v("The auto-generated table below describes the libraries and the modules of each board configuration.")])],1)}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/62.11ffb6e7.js b/dev/assets/js/62.91c08ee2.js similarity index 99% rename from dev/assets/js/62.11ffb6e7.js rename to dev/assets/js/62.91c08ee2.js index 1b8185ae32..77dadce205 100644 --- a/dev/assets/js/62.11ffb6e7.js +++ b/dev/assets/js/62.91c08ee2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{451:function(t,e,a){"use strict";a.r(e);var s=a(14),o=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"actuators"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#actuators"}},[t._v("#")]),t._v(" Actuators")]),t._v(" "),e("h2",{attrs:{id:"on-off-functionality"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#on-off-functionality"}},[t._v("#")]),t._v(" ON/OFF Functionality")]),t._v(" "),e("p",[t._v("The ON/OFF module of the OpenMQTTGateway provides you with the capability to control actuators, such as relays or LEDs, by assigning a HIGH or LOW value to a specific PIN through MQTT topics. For instance, you might connect a transistor to power a relay or an LED to the PIN.")]),t._v(" "),e("p",[t._v("To operate the default GPIO, identified as ACTUATOR_ONOFF_GPIO, you'll need to issue certain commands which comply with the JSON receiving format.")]),t._v(" "),e("h3",{attrs:{id:"standard-on-off-control"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#standard-on-off-control"}},[t._v("#")]),t._v(" Standard ON/OFF control")]),t._v(" "),e("p",[t._v("The OFF command can be executed as follows:\n"),e("code",[t._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m '{\"cmd\":0}'")])]),t._v(" "),e("p",[t._v("For the ON command, use:\n"),e("code",[t._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m '{\"cmd\":1}'")])]),t._v(" "),e("p",[t._v("You can also specify the GPIO number that you wish to control:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m \'{"gpio":15,"cmd":1}\'')])]),t._v(" "),e("p",[t._v("The status of the actuator will be published to the topic below every 2 minutes or upon state change.\n"),e("code",[t._v("home/OpenMQTTGateway/ONOFFtoMQTT '{\"cmd\":0}'")])]),t._v(" "),e("p",[t._v("In the case of the simple receiving format, the commands can be executed as follows:\nOFF command: "),e("code",[t._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF/setOFF -m 15")]),t._v("\nON command: "),e("code",[t._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF/setON -m 15")])]),t._v(" "),e("h3",{attrs:{id:"pulse-control-for-short-activations"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#pulse-control-for-short-activations"}},[t._v("#")]),t._v(" Pulse control for short activations")]),t._v(" "),e("p",[t._v("Additionally, the module also supports short activations, during which the PIN changes state for just half a second. This can be particularly useful when operating a relay board to trigger a step relay, thus allowing your home automation system to function as an auxiliary switch, without interfering with the existing switches in your house.")]),t._v(" "),e("p",[t._v("This functionality is available only through the JSON receiving format.")]),t._v(" "),e("p",[t._v("To switch ON for half a second before reverting to OFF:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m \'{"gpio":15,"cmd":"high_pulse"}\'')])]),t._v(" "),e("p",[t._v("To switch OFF for half a second before reverting to ON:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m \'{"gpio":15,"cmd":"low_pulse}\'')])]),t._v(" "),e("p",[t._v("If you need to specify an activation duration other than half a second, include the pulse_length parameter along with the duration in milliseconds (ms).")]),t._v(" "),e("p",[t._v("To switch ON for 25 ms before reverting to OFF:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m \'{"gpio":15,"cmd":"high_pulse","pulse_length":25}\'')])]),t._v(" "),e("p",[t._v("To switch OFF for 25 ms before reverting to ON:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m \'{"gpio":15,"cmd":"low_pulse","pulse_length":25}\'')])]),t._v(" "),e("p",[t._v("Recovery Functionality (ESP32 only)\nIn the event of power loss, by default, the module will record the last known state of the actuator and attempt to revert to this state upon restarting. For example, if a relay was ON at the time of a power outage, the firmware will attempt to switch the relay ON again once power is restored.")]),t._v(" "),e("p",[t._v("If you prefer to disable this functionality, you can set the macro USE_LAST_STATE_ON_RESTART to false during the build time. Alternatively, you can issue the following command at runtime:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF/config -m \'{"uselaststate":false,"save":true}\'')])]),t._v(" "),e("h2",{attrs:{id:"fastled"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#fastled"}},[t._v("#")]),t._v(" FASTLED")]),t._v(" "),e("h3",{attrs:{id:"the-fastled-module-support-2-different-operation-modes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-fastled-module-support-2-different-operation-modes"}},[t._v("#")]),t._v(" The FASTLED module support 2 different operation modes")]),t._v(" "),e("ol",[e("li",[t._v("control one specific RGB LED")])]),t._v(" "),e("ul",[e("li",[t._v("Set color")]),t._v(" "),e("li",[t._v("Set blink")])]),t._v(" "),e("ol",{attrs:{start:"2"}},[e("li",[t._v("Start fire animation (Fire2012)")])]),t._v(" "),e("h3",{attrs:{id:"hardware-wiring"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#hardware-wiring"}},[t._v("#")]),t._v(" Hardware wiring")]),t._v(" "),e("p",[t._v("Theoretically it should be possible to use every free IO pin. But after some tests only pin D2 works at WEMOS D1. Other platforms can work.\nThe default setting use NEOPIXEL (WS2812B). The simplest wiring is direct connect D2 to data pin of LED stripe and connect VCC/GND to power source. You should also add a capacitor.")]),t._v(" "),e("h2",{attrs:{id:"pwm"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#pwm"}},[t._v("#")]),t._v(" PWM")]),t._v(" "),e("p",[t._v("This module allows control over PWM outputs.\nIt's primary use is for controlling LEDs, but it should be equally at home controlling anything that's controlled using PWM.\nE.g. LEDs, servos, PC fans.\nYou would typically connect a PWM output to a transistor or MOSFET to allow control over higher power devices.")]),t._v(" "),e("ul",[e("li",[t._v("JSON message format allows you to set any or all channels in a single message.")]),t._v(" "),e("li",[t._v("Each channel can be set to smoothly transition from its current setting to the new setting over a specified number of seconds.")]),t._v(" "),e("li",[t._v("Each channel can be calibrated with min and max settings, as well as a gamma curve.")])]),t._v(" "),e("h3",{attrs:{id:"configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),e("p",[t._v("In order to use the PWM actuator, you need to configure which pins the PWM output channels will be connected to.\nThere are a couple of "),e("code",[t._v("#defines that achieve this. They can be defined in the")]),t._v("build_flags"),e("code",[t._v("section of the env, or by directly editing")]),t._v("config_PWM.h`.")]),t._v(" "),e("div",{staticClass:"language-c line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-c"}},[e("code",[e("span",{pre:!0,attrs:{class:"token macro property"}},[e("span",{pre:!0,attrs:{class:"token directive-hash"}},[t._v("#")]),e("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("define")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token macro-name"}},[t._v("PWM_CHANNEL_NAMES")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")])]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"r"')]),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"g"')]),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"w0"')]),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"w1"')]),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token macro property"}},[e("span",{pre:!0,attrs:{class:"token directive-hash"}},[t._v("#")]),e("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("define")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token macro-name"}},[t._v("PWM_CHANNEL_PINS")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("25")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("33")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("23")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("22")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])])]),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("p",[e("code",[t._v("PWM_CHANNEL_NAMES")]),t._v(" lists the names that you would like to assign to each channel, and determines the number of channels.\n"),e("code",[t._v("PWM_CHANNEL_PINS")]),t._v(" lists the corresponding output pins that the channels will be connected to.\nThe number of entries in "),e("code",[t._v("PWM_CHANNEL_PINS")]),t._v(" must exactly match the number of entries in "),e("code",[t._v("PWM_CHANNEL_NAMES")]),t._v(".")]),t._v(" "),e("h3",{attrs:{id:"usage"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),e("h4",{attrs:{id:"set"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#set"}},[t._v("#")]),t._v(" Set")]),t._v(" "),e("p",[e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoPWM/set -m \'{"r":0.5,"g":0.2,"b":1,"fade":10.0}\'')])]),t._v(" "),e("p",[t._v("This example sets new values for the channels named "),e("code",[t._v("r")]),t._v(", "),e("code",[t._v("g")]),t._v(", and "),e("code",[t._v("b")]),t._v(".\nThese channels will transition from their current values to the new values over 10s.")]),t._v(" "),e("h4",{attrs:{id:"calibrate"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#calibrate"}},[t._v("#")]),t._v(" Calibrate")]),t._v(" "),e("p",[t._v("Calibration allows that min and max levels to be configured for each channel, so that the full 0-1 range of values\nthat can be specified with the "),e("code",[t._v("set")]),t._v(" command actually do things.")]),t._v(" "),e("p",[e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoPWM/calibrate -m \'{"min-r":0.01,"max-r":1.0,"gamma-r":2.5}\'')])]),t._v(" "),e("p",[t._v("This example calibrates the channel named "),e("code",[t._v("r")]),t._v(".\nAfter this calibration, if you set the "),e("code",[t._v("r")]),t._v(" channel to 0.0, it will be remapped to 0.01 internally.\nAlso, the gamma curve for this channel will be set to 2.5.\nThis means that input values are raised to the power 2.5 internally.\nThis can be used to improve the linearity of inputs.")]),t._v(" "),e("h2",{attrs:{id:"somfy-rts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#somfy-rts"}},[t._v("#")]),t._v(" Somfy RTS")]),t._v(" "),e("p",[t._v("This actuator allows to control Somfy RTS devices.")]),t._v(" "),e("h3",{attrs:{id:"setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#setup"}},[t._v("#")]),t._v(" Setup")]),t._v(" "),e("p",[t._v("Before the module can be used, virtual Somfy RTS remotes must be created.\nThis is done in "),e("code",[t._v("config_Somfy.h")]),t._v(".")]),t._v(" "),e("p",[e("code",[t._v("SOMFY_REMOTE_NUM")]),t._v(" must be set to the number of virtual Somfy RTS remotes you want to have.\nThen create for each of the virtual Somfy RTS remotes a unique 3-byte code and add them to "),e("code",[t._v("somfyRemotes")]),t._v(".\nAfter a remote is setup, the order and codes should not be changed, else the setup process for all remotes have to be repeated.\nAdding new codes at the end of the list is no problem.\nExample of three virtual Somfy RTS remote codes:")]),t._v(" "),e("div",{staticClass:"language-C line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-c"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("uint32_t")]),t._v(" somfyRemotes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("SOMFY_REMOTE_NUM"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x5184c8")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0xba24d0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0xb77753")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br")])]),e("p",[t._v("Next the virtual Somfy RTS remotes must be paired with the Somfy RTS devices you want to control.\nThe next section describes how the PROG command/button of the virtual remote can be used.\nUse the manual of the device you want to control for instructions on how to pair the virtual remote with the device.")]),t._v(" "),e("h3",{attrs:{id:"commands"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#commands"}},[t._v("#")]),t._v(" Commands")]),t._v(" "),e("p",[t._v("Commands must be send to the "),e("code",[t._v("commands/MQTTtoSomfy")]),t._v(" subtopic.\nOnly json messages are supported.\nThe json message must contain two properties:")]),t._v(" "),e("ul",[e("li",[t._v("remote: the index of the remote which is used to send the command (index start at zero)")]),t._v(" "),e("li",[t._v("command: the command which should be send with the remote as string, see "),e("a",{attrs:{href:"https://github.com/Legion2/Somfy_Remote_Lib#available-commands",target:"_blank",rel:"noopener noreferrer"}},[t._v("table of command names"),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("p",[t._v("Optionally it can contain the following property:")]),t._v(" "),e("ul",[e("li",[t._v("repeat: the number how often the command is repeated, default 4. Should be used to simulate long button presses, by increasing the repeat number, e.g. 20.")])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v('The middle button on physical Somfy RTS Remote controls is called "My".')])]),t._v(" "),e("p",[t._v("The frequency key is optional, if not set the gateway will use the default frequency defined by MQTTtoRF command at runtime or "),e("code",[t._v("RF_FREQUENCY")]),t._v(" at buildtime.")]),t._v(" "),e("p",[t._v("Send PROG command with remote 0:")]),t._v(" "),e("p",[e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway_Somfy/commands/MQTTtoSomfy -m \'{"remote":0,"command":"Prog","frequency":433.42}\'')])]),t._v(" "),e("p",[t._v("Send Up command with remote 1:")]),t._v(" "),e("p",[e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway_Somfy/commands/MQTTtoSomfy -m \'{"remote":1,"command":"Up","frequency":433.42}\'')])])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{452:function(t,e,a){"use strict";a.r(e);var s=a(14),o=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"actuators"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#actuators"}},[t._v("#")]),t._v(" Actuators")]),t._v(" "),e("h2",{attrs:{id:"on-off-functionality"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#on-off-functionality"}},[t._v("#")]),t._v(" ON/OFF Functionality")]),t._v(" "),e("p",[t._v("The ON/OFF module of the OpenMQTTGateway provides you with the capability to control actuators, such as relays or LEDs, by assigning a HIGH or LOW value to a specific PIN through MQTT topics. For instance, you might connect a transistor to power a relay or an LED to the PIN.")]),t._v(" "),e("p",[t._v("To operate the default GPIO, identified as ACTUATOR_ONOFF_GPIO, you'll need to issue certain commands which comply with the JSON receiving format.")]),t._v(" "),e("h3",{attrs:{id:"standard-on-off-control"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#standard-on-off-control"}},[t._v("#")]),t._v(" Standard ON/OFF control")]),t._v(" "),e("p",[t._v("The OFF command can be executed as follows:\n"),e("code",[t._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m '{\"cmd\":0}'")])]),t._v(" "),e("p",[t._v("For the ON command, use:\n"),e("code",[t._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m '{\"cmd\":1}'")])]),t._v(" "),e("p",[t._v("You can also specify the GPIO number that you wish to control:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m \'{"gpio":15,"cmd":1}\'')])]),t._v(" "),e("p",[t._v("The status of the actuator will be published to the topic below every 2 minutes or upon state change.\n"),e("code",[t._v("home/OpenMQTTGateway/ONOFFtoMQTT '{\"cmd\":0}'")])]),t._v(" "),e("p",[t._v("In the case of the simple receiving format, the commands can be executed as follows:\nOFF command: "),e("code",[t._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF/setOFF -m 15")]),t._v("\nON command: "),e("code",[t._v("mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF/setON -m 15")])]),t._v(" "),e("h3",{attrs:{id:"pulse-control-for-short-activations"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#pulse-control-for-short-activations"}},[t._v("#")]),t._v(" Pulse control for short activations")]),t._v(" "),e("p",[t._v("Additionally, the module also supports short activations, during which the PIN changes state for just half a second. This can be particularly useful when operating a relay board to trigger a step relay, thus allowing your home automation system to function as an auxiliary switch, without interfering with the existing switches in your house.")]),t._v(" "),e("p",[t._v("This functionality is available only through the JSON receiving format.")]),t._v(" "),e("p",[t._v("To switch ON for half a second before reverting to OFF:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m \'{"gpio":15,"cmd":"high_pulse"}\'')])]),t._v(" "),e("p",[t._v("To switch OFF for half a second before reverting to ON:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m \'{"gpio":15,"cmd":"low_pulse}\'')])]),t._v(" "),e("p",[t._v("If you need to specify an activation duration other than half a second, include the pulse_length parameter along with the duration in milliseconds (ms).")]),t._v(" "),e("p",[t._v("To switch ON for 25 ms before reverting to OFF:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m \'{"gpio":15,"cmd":"high_pulse","pulse_length":25}\'')])]),t._v(" "),e("p",[t._v("To switch OFF for 25 ms before reverting to ON:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF -m \'{"gpio":15,"cmd":"low_pulse","pulse_length":25}\'')])]),t._v(" "),e("p",[t._v("Recovery Functionality (ESP32 only)\nIn the event of power loss, by default, the module will record the last known state of the actuator and attempt to revert to this state upon restarting. For example, if a relay was ON at the time of a power outage, the firmware will attempt to switch the relay ON again once power is restored.")]),t._v(" "),e("p",[t._v("If you prefer to disable this functionality, you can set the macro USE_LAST_STATE_ON_RESTART to false during the build time. Alternatively, you can issue the following command at runtime:\n"),e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoONOFF/config -m \'{"uselaststate":false,"save":true}\'')])]),t._v(" "),e("h2",{attrs:{id:"fastled"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#fastled"}},[t._v("#")]),t._v(" FASTLED")]),t._v(" "),e("h3",{attrs:{id:"the-fastled-module-support-2-different-operation-modes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-fastled-module-support-2-different-operation-modes"}},[t._v("#")]),t._v(" The FASTLED module support 2 different operation modes")]),t._v(" "),e("ol",[e("li",[t._v("control one specific RGB LED")])]),t._v(" "),e("ul",[e("li",[t._v("Set color")]),t._v(" "),e("li",[t._v("Set blink")])]),t._v(" "),e("ol",{attrs:{start:"2"}},[e("li",[t._v("Start fire animation (Fire2012)")])]),t._v(" "),e("h3",{attrs:{id:"hardware-wiring"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#hardware-wiring"}},[t._v("#")]),t._v(" Hardware wiring")]),t._v(" "),e("p",[t._v("Theoretically it should be possible to use every free IO pin. But after some tests only pin D2 works at WEMOS D1. Other platforms can work.\nThe default setting use NEOPIXEL (WS2812B). The simplest wiring is direct connect D2 to data pin of LED stripe and connect VCC/GND to power source. You should also add a capacitor.")]),t._v(" "),e("h2",{attrs:{id:"pwm"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#pwm"}},[t._v("#")]),t._v(" PWM")]),t._v(" "),e("p",[t._v("This module allows control over PWM outputs.\nIt's primary use is for controlling LEDs, but it should be equally at home controlling anything that's controlled using PWM.\nE.g. LEDs, servos, PC fans.\nYou would typically connect a PWM output to a transistor or MOSFET to allow control over higher power devices.")]),t._v(" "),e("ul",[e("li",[t._v("JSON message format allows you to set any or all channels in a single message.")]),t._v(" "),e("li",[t._v("Each channel can be set to smoothly transition from its current setting to the new setting over a specified number of seconds.")]),t._v(" "),e("li",[t._v("Each channel can be calibrated with min and max settings, as well as a gamma curve.")])]),t._v(" "),e("h3",{attrs:{id:"configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),e("p",[t._v("In order to use the PWM actuator, you need to configure which pins the PWM output channels will be connected to.\nThere are a couple of "),e("code",[t._v("#defines that achieve this. They can be defined in the")]),t._v("build_flags"),e("code",[t._v("section of the env, or by directly editing")]),t._v("config_PWM.h`.")]),t._v(" "),e("div",{staticClass:"language-c line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-c"}},[e("code",[e("span",{pre:!0,attrs:{class:"token macro property"}},[e("span",{pre:!0,attrs:{class:"token directive-hash"}},[t._v("#")]),e("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("define")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token macro-name"}},[t._v("PWM_CHANNEL_NAMES")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")])]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"r"')]),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"g"')]),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"w0"')]),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"w1"')]),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token macro property"}},[e("span",{pre:!0,attrs:{class:"token directive-hash"}},[t._v("#")]),e("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("define")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token macro-name"}},[t._v("PWM_CHANNEL_PINS")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token expression"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("25")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("33")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("23")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("22")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])])]),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("p",[e("code",[t._v("PWM_CHANNEL_NAMES")]),t._v(" lists the names that you would like to assign to each channel, and determines the number of channels.\n"),e("code",[t._v("PWM_CHANNEL_PINS")]),t._v(" lists the corresponding output pins that the channels will be connected to.\nThe number of entries in "),e("code",[t._v("PWM_CHANNEL_PINS")]),t._v(" must exactly match the number of entries in "),e("code",[t._v("PWM_CHANNEL_NAMES")]),t._v(".")]),t._v(" "),e("h3",{attrs:{id:"usage"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),e("h4",{attrs:{id:"set"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#set"}},[t._v("#")]),t._v(" Set")]),t._v(" "),e("p",[e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoPWM/set -m \'{"r":0.5,"g":0.2,"b":1,"fade":10.0}\'')])]),t._v(" "),e("p",[t._v("This example sets new values for the channels named "),e("code",[t._v("r")]),t._v(", "),e("code",[t._v("g")]),t._v(", and "),e("code",[t._v("b")]),t._v(".\nThese channels will transition from their current values to the new values over 10s.")]),t._v(" "),e("h4",{attrs:{id:"calibrate"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#calibrate"}},[t._v("#")]),t._v(" Calibrate")]),t._v(" "),e("p",[t._v("Calibration allows that min and max levels to be configured for each channel, so that the full 0-1 range of values\nthat can be specified with the "),e("code",[t._v("set")]),t._v(" command actually do things.")]),t._v(" "),e("p",[e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoPWM/calibrate -m \'{"min-r":0.01,"max-r":1.0,"gamma-r":2.5}\'')])]),t._v(" "),e("p",[t._v("This example calibrates the channel named "),e("code",[t._v("r")]),t._v(".\nAfter this calibration, if you set the "),e("code",[t._v("r")]),t._v(" channel to 0.0, it will be remapped to 0.01 internally.\nAlso, the gamma curve for this channel will be set to 2.5.\nThis means that input values are raised to the power 2.5 internally.\nThis can be used to improve the linearity of inputs.")]),t._v(" "),e("h2",{attrs:{id:"somfy-rts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#somfy-rts"}},[t._v("#")]),t._v(" Somfy RTS")]),t._v(" "),e("p",[t._v("This actuator allows to control Somfy RTS devices.")]),t._v(" "),e("h3",{attrs:{id:"setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#setup"}},[t._v("#")]),t._v(" Setup")]),t._v(" "),e("p",[t._v("Before the module can be used, virtual Somfy RTS remotes must be created.\nThis is done in "),e("code",[t._v("config_Somfy.h")]),t._v(".")]),t._v(" "),e("p",[e("code",[t._v("SOMFY_REMOTE_NUM")]),t._v(" must be set to the number of virtual Somfy RTS remotes you want to have.\nThen create for each of the virtual Somfy RTS remotes a unique 3-byte code and add them to "),e("code",[t._v("somfyRemotes")]),t._v(".\nAfter a remote is setup, the order and codes should not be changed, else the setup process for all remotes have to be repeated.\nAdding new codes at the end of the list is no problem.\nExample of three virtual Somfy RTS remote codes:")]),t._v(" "),e("div",{staticClass:"language-C line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-c"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("uint32_t")]),t._v(" somfyRemotes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("SOMFY_REMOTE_NUM"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x5184c8")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0xba24d0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0xb77753")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br")])]),e("p",[t._v("Next the virtual Somfy RTS remotes must be paired with the Somfy RTS devices you want to control.\nThe next section describes how the PROG command/button of the virtual remote can be used.\nUse the manual of the device you want to control for instructions on how to pair the virtual remote with the device.")]),t._v(" "),e("h3",{attrs:{id:"commands"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#commands"}},[t._v("#")]),t._v(" Commands")]),t._v(" "),e("p",[t._v("Commands must be send to the "),e("code",[t._v("commands/MQTTtoSomfy")]),t._v(" subtopic.\nOnly json messages are supported.\nThe json message must contain two properties:")]),t._v(" "),e("ul",[e("li",[t._v("remote: the index of the remote which is used to send the command (index start at zero)")]),t._v(" "),e("li",[t._v("command: the command which should be send with the remote as string, see "),e("a",{attrs:{href:"https://github.com/Legion2/Somfy_Remote_Lib#available-commands",target:"_blank",rel:"noopener noreferrer"}},[t._v("table of command names"),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("p",[t._v("Optionally it can contain the following property:")]),t._v(" "),e("ul",[e("li",[t._v("repeat: the number how often the command is repeated, default 4. Should be used to simulate long button presses, by increasing the repeat number, e.g. 20.")])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v('The middle button on physical Somfy RTS Remote controls is called "My".')])]),t._v(" "),e("p",[t._v("The frequency key is optional, if not set the gateway will use the default frequency defined by MQTTtoRF command at runtime or "),e("code",[t._v("RF_FREQUENCY")]),t._v(" at buildtime.")]),t._v(" "),e("p",[t._v("Send PROG command with remote 0:")]),t._v(" "),e("p",[e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway_Somfy/commands/MQTTtoSomfy -m \'{"remote":0,"command":"Prog","frequency":433.42}\'')])]),t._v(" "),e("p",[t._v("Send Up command with remote 1:")]),t._v(" "),e("p",[e("code",[t._v('mosquitto_pub -t home/OpenMQTTGateway_Somfy/commands/MQTTtoSomfy -m \'{"remote":1,"command":"Up","frequency":433.42}\'')])])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/63.ac5598ff.js b/dev/assets/js/63.56bace74.js similarity index 99% rename from dev/assets/js/63.ac5598ff.js rename to dev/assets/js/63.56bace74.js index 9047a0c07d..ccf4ddbff8 100644 --- a/dev/assets/js/63.ac5598ff.js +++ b/dev/assets/js/63.56bace74.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{457: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],{455: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/65.e1f248ae.js b/dev/assets/js/65.eeb31042.js similarity index 98% rename from dev/assets/js/65.e1f248ae.js rename to dev/assets/js/65.eeb31042.js index 715bf81dac..ded3d0dff4 100644 --- a/dev/assets/js/65.e1f248ae.js +++ b/dev/assets/js/65.eeb31042.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{462: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],{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:"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/66.0efd9dff.js b/dev/assets/js/66.509747b4.js similarity index 99% rename from dev/assets/js/66.0efd9dff.js rename to dev/assets/js/66.509747b4.js index 6c9fcffc79..c58c8c6d04 100644 --- a/dev/assets/js/66.0efd9dff.js +++ b/dev/assets/js/66.509747b4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{464:function(e,s,a){"use strict";a.r(s);var t=a(14),n=Object(t.a)({},(function(){var e=this,s=e._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"rs232-serial-gateway"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#rs232-serial-gateway"}},[e._v("#")]),e._v(" RS232/Serial gateway")]),e._v(" "),s("p",[e._v("The SERIAL gateway can be used to send and receive data from the serial connection to and from MQTT. Both softwareSerial as hardwareSerial are supported. HardwareSerial can be used for higher baud rates, but is limited to specific pins on most platforms.")]),e._v(" "),s("h2",{attrs:{id:"sending-an-serial-message"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sending-an-serial-message"}},[e._v("#")]),e._v(" Sending an SERIAL message")]),e._v(" "),s("p",[e._v("Simply publish the message you wish to transmit, minus the prefix and postfix. For example, to send the \"Turn On\" signal for a Mitsubishi XD221U projector, the code is simply '!' so you would use the command")]),e._v(" "),s("p",[s("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/XtoSERIAL -m \'{"value": "!"}\'')])]),e._v(" "),s("p",[e._v("It will automatically add the prefix and postfix you set in "),s("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/master/main/config_SERIAL.h",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_SERIAL.h"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("h2",{attrs:{id:"receiving-an-serial-message"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#receiving-an-serial-message"}},[e._v("#")]),e._v(" Receiving an SERIAL message")]),e._v(" "),s("p",[e._v("Two modes are available for receiving SERIAL messages.")]),e._v(" "),s("h3",{attrs:{id:"single-mqtt-message-mode-default"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#single-mqtt-message-mode-default"}},[e._v("#")]),e._v(" Single MQTT message mode (default)")]),e._v(" "),s("p",[e._v("To receive a message, subscribe to all with "),s("code",[e._v("mosquitto_sub -t +/# -v")]),e._v('\nand perform an action that should get a response from the device. For example, If I were to send the "Turn On" signal from earlier, I would receive back')]),e._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[e._v("home/OpenMQTTGateway/SERIALtoMQTT "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("p",[e._v("Because this projector echoes back a received command to acknowledge. Some devices will send a NACK, or Negative Acknowledge, to confirm that they received your message but could not comply. That would look like")]),e._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[e._v("home/OpenMQTTGateway/SERIALtoMQTT "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"!:N"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("h3",{attrs:{id:"json-mode"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#json-mode"}},[e._v("#")]),e._v(" JSON mode")]),e._v(" "),s("p",[e._v("This mode can be used if the received message on the serial link is JSON. The JSON keys are used as separate MQTT sub-topics. For nested JSON this will be repeated for sub-keys up to the specified nesting level.")]),e._v(" "),s("p",[e._v("For example:")]),e._v(" "),s("p",[e._v("input received at serial link:")]),e._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("temperature"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("sens1"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("22")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" sens2"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("23")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" humidity"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("sens1"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("80")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" sens2"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("60")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("p",[e._v("output in case of max nesting level 1:")]),e._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[e._v("home/OpenMQTTGateway/SERIALtoMQTT/temperature "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{sens1: 22, sens2: 23}"')]),e._v("\nhome/OpenMQTTGateway/SERIALtoMQTT/humidity "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{sens1: 80, sens2: 60}"')]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br")])]),s("p",[e._v("output in case of max nesting level 2 (or higher):")]),e._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[e._v("home/OpenMQTTGateway/SERIALtoMQTT/temperature/sens1 "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("22")]),e._v("\nhome/OpenMQTTGateway/SERIALtoMQTT/temperature/sens2 "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("23")]),e._v("\nhome/OpenMQTTGateway/SERIALtoMQTT/humidity/sens1 "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("80")]),e._v("\nhome/OpenMQTTGateway/SERIALtoMQTT/humidity/sens2 "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("60")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br")])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{462:function(e,s,a){"use strict";a.r(s);var t=a(14),n=Object(t.a)({},(function(){var e=this,s=e._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"rs232-serial-gateway"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#rs232-serial-gateway"}},[e._v("#")]),e._v(" RS232/Serial gateway")]),e._v(" "),s("p",[e._v("The SERIAL gateway can be used to send and receive data from the serial connection to and from MQTT. Both softwareSerial as hardwareSerial are supported. HardwareSerial can be used for higher baud rates, but is limited to specific pins on most platforms.")]),e._v(" "),s("h2",{attrs:{id:"sending-an-serial-message"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sending-an-serial-message"}},[e._v("#")]),e._v(" Sending an SERIAL message")]),e._v(" "),s("p",[e._v("Simply publish the message you wish to transmit, minus the prefix and postfix. For example, to send the \"Turn On\" signal for a Mitsubishi XD221U projector, the code is simply '!' so you would use the command")]),e._v(" "),s("p",[s("code",[e._v('mosquitto_pub -t home/OpenMQTTGateway/commands/XtoSERIAL -m \'{"value": "!"}\'')])]),e._v(" "),s("p",[e._v("It will automatically add the prefix and postfix you set in "),s("a",{attrs:{href:"https://github.com/1technophile/OpenMQTTGateway/blob/master/main/config_SERIAL.h",target:"_blank",rel:"noopener noreferrer"}},[e._v("config_SERIAL.h"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("h2",{attrs:{id:"receiving-an-serial-message"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#receiving-an-serial-message"}},[e._v("#")]),e._v(" Receiving an SERIAL message")]),e._v(" "),s("p",[e._v("Two modes are available for receiving SERIAL messages.")]),e._v(" "),s("h3",{attrs:{id:"single-mqtt-message-mode-default"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#single-mqtt-message-mode-default"}},[e._v("#")]),e._v(" Single MQTT message mode (default)")]),e._v(" "),s("p",[e._v("To receive a message, subscribe to all with "),s("code",[e._v("mosquitto_sub -t +/# -v")]),e._v('\nand perform an action that should get a response from the device. For example, If I were to send the "Turn On" signal from earlier, I would receive back')]),e._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[e._v("home/OpenMQTTGateway/SERIALtoMQTT "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("p",[e._v("Because this projector echoes back a received command to acknowledge. Some devices will send a NACK, or Negative Acknowledge, to confirm that they received your message but could not comply. That would look like")]),e._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[e._v("home/OpenMQTTGateway/SERIALtoMQTT "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"value"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"!:N"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("h3",{attrs:{id:"json-mode"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#json-mode"}},[e._v("#")]),e._v(" JSON mode")]),e._v(" "),s("p",[e._v("This mode can be used if the received message on the serial link is JSON. The JSON keys are used as separate MQTT sub-topics. For nested JSON this will be repeated for sub-keys up to the specified nesting level.")]),e._v(" "),s("p",[e._v("For example:")]),e._v(" "),s("p",[e._v("input received at serial link:")]),e._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("temperature"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("sens1"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("22")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" sens2"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("23")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" humidity"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("sens1"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("80")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" sens2"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("60")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("p",[e._v("output in case of max nesting level 1:")]),e._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[e._v("home/OpenMQTTGateway/SERIALtoMQTT/temperature "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{sens1: 22, sens2: 23}"')]),e._v("\nhome/OpenMQTTGateway/SERIALtoMQTT/humidity "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{sens1: 80, sens2: 60}"')]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br")])]),s("p",[e._v("output in case of max nesting level 2 (or higher):")]),e._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[e._v("home/OpenMQTTGateway/SERIALtoMQTT/temperature/sens1 "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("22")]),e._v("\nhome/OpenMQTTGateway/SERIALtoMQTT/temperature/sens2 "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("23")]),e._v("\nhome/OpenMQTTGateway/SERIALtoMQTT/humidity/sens1 "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("80")]),e._v("\nhome/OpenMQTTGateway/SERIALtoMQTT/humidity/sens2 "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("60")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br")])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/dev/assets/js/app.c1a5ca1f.js b/dev/assets/js/app.d3b254a6.js similarity index 87% rename from dev/assets/js/app.c1a5ca1f.js rename to dev/assets/js/app.d3b254a6.js index aedb9ef327..8c36a98937 100644 --- a/dev/assets/js/app.c1a5ca1f.js +++ b/dev/assets/js/app.d3b254a6.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 O(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var k=/-(\w)/g,T=O((function(t){return t.replace(k,(function(t,e){return e?e.toUpperCase():""}))})),P=O((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),C=/\B([A-Z])/g,E=O((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 Oe(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 ke(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return ke(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=Oe(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,Or)}};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=O((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=O((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 Oo(t,e,n){var r=To(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&&ko.test(r[mo+"Property"])}}function Po(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 T(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(Oe(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[T(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 Oa(t,e){return Sa(t)&&t._isRouter&&(null==e||t.type===e)}function ka(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 Ta(t){return function(e,n,r){var o=!1,i=0,a=null;Pa(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 Pa(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=Pa(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&&(Oa(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){!Oa(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(Oi(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(Oi(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=Oi(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(Oi(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(Oi(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){Oa(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?Oi(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=Oa,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(18)]).then(n.bind(null,413)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(19)]).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,410)),"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(20)]).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,419)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,414)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,415)),"layouts/404":()=>n.e(7).then(n.bind(null,416)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,417)),NotFound:()=>n.e(7).then(n.bind(null,416)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,417))},Ga={"v-96f26938":()=>n.e(48).then(n.bind(null,420)),"v-06f4d0aa":()=>n.e(21).then(n.bind(null,421)),"v-347fe277":()=>n.e(12).then(n.bind(null,422)),"v-b936cd92":()=>n.e(10).then(n.bind(null,423)),"v-73cb197f":()=>n.e(16).then(n.bind(null,424)),"v-095f6301":()=>n.e(42).then(n.bind(null,425)),"v-08357a02":()=>n.e(13).then(n.bind(null,426)),"v-e115e73a":()=>n.e(49).then(n.bind(null,427)),"v-2db1db37":()=>n.e(50).then(n.bind(null,428)),"v-117d8812":()=>n.e(51).then(n.bind(null,429)),"v-f3fbff12":()=>n.e(52).then(n.bind(null,430)),"v-01bee537":()=>n.e(53).then(n.bind(null,431)),"v-56e06d4d":()=>n.e(54).then(n.bind(null,432)),"v-412f01af":()=>n.e(26).then(n.bind(null,433)),"v-204c7852":()=>n.e(24).then(n.bind(null,434)),"v-5e0eec87":()=>n.e(43).then(n.bind(null,435)),"v-29f81312":()=>n.e(55).then(n.bind(null,436)),"v-0c47cd52":()=>n.e(56).then(n.bind(null,437)),"v-cf2ed192":()=>n.e(33).then(n.bind(null,438)),"v-eab731fa":()=>n.e(34).then(n.bind(null,439)),"v-0d1e8e9e":()=>n.e(57).then(n.bind(null,440)),"v-b5aec012":()=>n.e(44).then(n.bind(null,441)),"v-2fe62c26":()=>n.e(35).then(n.bind(null,442)),"v-aa1cc612":()=>n.e(58).then(n.bind(null,443)),"v-255607ed":()=>n.e(36).then(n.bind(null,444)),"v-303bd052":()=>n.e(59).then(n.bind(null,445)),"v-7df515d2":()=>n.e(37).then(n.bind(null,446)),"v-2c32e617":()=>n.e(38).then(n.bind(null,447)),"v-27c660f7":()=>n.e(28).then(n.bind(null,448)),"v-2b7b8f3b":()=>n.e(61).then(n.bind(null,449)),"v-6e14dcd7":()=>n.e(27).then(n.bind(null,450)),"v-0d819412":()=>n.e(62).then(n.bind(null,451)),"v-246d3f77":()=>n.e(60).then(n.bind(null,452)),"v-bbb970d2":()=>n.e(17).then(n.bind(null,453)),"v-3043a2b9":()=>n.e(39).then(n.bind(null,454)),"v-20c05837":()=>n.e(45).then(n.bind(null,455)),"v-131b9357":()=>n.e(40).then(n.bind(null,456)),"v-288d7b9e":()=>n.e(63).then(n.bind(null,457)),"v-a9ffe0fe":()=>n.e(46).then(n.bind(null,458)),"v-749f316f":()=>n.e(29).then(n.bind(null,459)),"v-947f362a":()=>n.e(30).then(n.bind(null,460)),"v-21b208b7":()=>n.e(64).then(n.bind(null,461)),"v-2494b4d7":()=>n.e(65).then(n.bind(null,462)),"v-2566e137":()=>n.e(67).then(n.bind(null,463)),"v-93d2a72a":()=>n.e(66).then(n.bind(null,464))};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)}},Os=n(22),ks=n.n(Os),Ts={mounted(){ks.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Qn.component(t.name)||ks.a.start(),n()}),this.$router.afterEach(()=>{ks.a.done(),this.isSidebarOpen=!1})}},Ps=n(89),Cs=n.n(Ps),Es=[gs,Ss,Ts,{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-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-e115e73a",path:"/participate/adding-protocols.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-e115e73a").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-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-412f01af",path:"/prerequisites/M5.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-412f01af").then(n)}},{name:"v-204c7852",path:"/prerequisites/devices.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-204c7852").then(n)}},{name:"v-5e0eec87",path:"/prerequisites/controller.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-5e0eec87").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-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-b5aec012",path:"/setitup/gsm.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-b5aec012").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-303bd052",path:"/upload/builds.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-303bd052").then(n)}},{name:"v-7df515d2",path:"/upload/advanced-configuration.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-7df515d2").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-2b7b8f3b",path:"/upload/web-install.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2b7b8f3b").then(n)}},{name:"v-6e14dcd7",path:"/upload/binaries.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-6e14dcd7").then(n)}},{name:"v-0d819412",path:"/use/actuators.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-0d819412").then(n)}},{name:"v-246d3f77",path:"/upload/troubleshoot.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-246d3f77").then(n)}},{name:"v-bbb970d2",path:"/use/ble.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-bbb970d2").then(n)}},{name:"v-3043a2b9",path:"/use/boards.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-3043a2b9").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-288d7b9e",path:"/use/displays.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-288d7b9e").then(n)}},{name:"v-a9ffe0fe",path:"/use/ir.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-a9ffe0fe").then(n)}},{name:"v-749f316f",path:"/use/lora.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-749f316f").then(n)}},{name:"v-947f362a",path:"/use/rf.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-947f362a").then(n)}},{name:"v-21b208b7",path:"/use/rfm69.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-21b208b7").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)}},{name:"v-93d2a72a",path:"/use/serial.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-93d2a72a").then(n)}},{path:"*",component:As}],Ls={title:"Theengs OpenMQTTGateway DEVELOPMENT SHA:4d6e7f 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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"Auto discovery",slug:"auto-discovery"},{level:2,title:"RTL_433 auto discovery specificity",slug:"rtl-433-auto-discovery-specificity"},{level:2,title:"MQTT Device Trigger and RF",slug:"mqtt-device-trigger-and-rf"},{level:2,title:"Manual integration examples",slug:"manual-integration-examples"},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"Community participation",frontmatter:{},regularPath:"/participate/community.html",relativePath:"participate/community.md",key:"v-2db1db37",path:"/participate/community.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"Supporting the project",frontmatter:{},regularPath:"/participate/support.html",relativePath:"participate/support.md",key:"v-f3fbff12",path:"/participate/support.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"Boards",frontmatter:{},regularPath:"/prerequisites/board.html",relativePath:"prerequisites/board.md",key:"v-01bee537",path:"/prerequisites/board.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"Broker",frontmatter:{},regularPath:"/prerequisites/broker.html",relativePath:"prerequisites/broker.md",key:"v-56e06d4d",path:"/prerequisites/broker.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"Controller",frontmatter:{},regularPath:"/prerequisites/controller.html",relativePath:"prerequisites/controller.md",key:"v-5e0eec87",path:"/prerequisites/controller.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"(Option 4) Build from the web",frontmatter:{},regularPath:"/upload/gitpod.html",relativePath:"upload/gitpod.md",key:"v-2c32e617",path:"/upload/gitpod.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:2,title:"ESP8266",slug:"esp8266"}],lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"AutoDiscovery compatible with OpenHAB (default: false)",slug:"autodiscovery-compatible-with-openhab-default-false"},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"Receiving data from RF signal",slug:"receiving-data-from-rf-signal"},{level:3,title:"Disabling Transmit function to safe a PIN",slug:"disabling-transmit-function-to-safe-a-pin"},{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"},{level:3,title:"Repeat the RF signal OpenMQTTGateway receive",slug:"repeat-the-rf-signal-openmqttgateway-receive"},{level:3,title:"Repeat the RF signal several times",slug:"repeat-the-rf-signal-several-times"},{level:3,title:"Set Transmit and Receive Frequency and Transmit Power of CC1101 Transceiver",slug:"set-transmit-and-receive-frequency-and-transmit-power-of-cc1101-transceiver"},{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-2"},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"Logging",slug:"logging"}],lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3}],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,418))),Qn.component("Badge",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,419))),Qn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,414))),Qn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,415)));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 O(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var k=/-(\w)/g,T=O((function(t){return t.replace(k,(function(t,e){return e?e.toUpperCase():""}))})),P=O((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),C=/\B([A-Z])/g,E=O((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 Oe(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 ke(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return ke(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=Oe(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,Or)}};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=O((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=O((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 Oo(t,e,n){var r=To(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&&ko.test(r[mo+"Property"])}}function Po(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 T(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(Oe(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[T(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 Oa(t,e){return Sa(t)&&t._isRouter&&(null==e||t.type===e)}function ka(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 Ta(t){return function(e,n,r){var o=!1,i=0,a=null;Pa(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 Pa(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=Pa(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&&(Oa(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){!Oa(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(Oi(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(Oi(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=Oi(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(Oi(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(Oi(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){Oa(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?Oi(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=Oa,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(18)]).then(n.bind(null,413)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(19)]).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,410)),"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(20)]).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,419)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,414)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,415)),"layouts/404":()=>n.e(7).then(n.bind(null,416)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,417)),NotFound:()=>n.e(7).then(n.bind(null,416)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,417))},Ga={"v-96f26938":()=>n.e(48).then(n.bind(null,420)),"v-06f4d0aa":()=>n.e(21).then(n.bind(null,421)),"v-347fe277":()=>n.e(12).then(n.bind(null,422)),"v-b936cd92":()=>n.e(10).then(n.bind(null,423)),"v-095f6301":()=>n.e(42).then(n.bind(null,424)),"v-73cb197f":()=>n.e(16).then(n.bind(null,425)),"v-08357a02":()=>n.e(13).then(n.bind(null,426)),"v-2db1db37":()=>n.e(50).then(n.bind(null,427)),"v-e115e73a":()=>n.e(49).then(n.bind(null,428)),"v-117d8812":()=>n.e(51).then(n.bind(null,429)),"v-412f01af":()=>n.e(26).then(n.bind(null,430)),"v-f3fbff12":()=>n.e(52).then(n.bind(null,431)),"v-01bee537":()=>n.e(53).then(n.bind(null,432)),"v-56e06d4d":()=>n.e(54).then(n.bind(null,433)),"v-5e0eec87":()=>n.e(43).then(n.bind(null,434)),"v-29f81312":()=>n.e(55).then(n.bind(null,435)),"v-204c7852":()=>n.e(24).then(n.bind(null,436)),"v-0c47cd52":()=>n.e(56).then(n.bind(null,437)),"v-cf2ed192":()=>n.e(33).then(n.bind(null,438)),"v-b5aec012":()=>n.e(44).then(n.bind(null,439)),"v-eab731fa":()=>n.e(34).then(n.bind(null,440)),"v-2fe62c26":()=>n.e(35).then(n.bind(null,441)),"v-0d1e8e9e":()=>n.e(57).then(n.bind(null,442)),"v-aa1cc612":()=>n.e(58).then(n.bind(null,443)),"v-255607ed":()=>n.e(36).then(n.bind(null,444)),"v-7df515d2":()=>n.e(37).then(n.bind(null,445)),"v-6e14dcd7":()=>n.e(27).then(n.bind(null,446)),"v-303bd052":()=>n.e(59).then(n.bind(null,447)),"v-2c32e617":()=>n.e(38).then(n.bind(null,448)),"v-246d3f77":()=>n.e(60).then(n.bind(null,449)),"v-27c660f7":()=>n.e(28).then(n.bind(null,450)),"v-2b7b8f3b":()=>n.e(61).then(n.bind(null,451)),"v-0d819412":()=>n.e(62).then(n.bind(null,452)),"v-bbb970d2":()=>n.e(17).then(n.bind(null,453)),"v-3043a2b9":()=>n.e(39).then(n.bind(null,454)),"v-288d7b9e":()=>n.e(63).then(n.bind(null,455)),"v-20c05837":()=>n.e(45).then(n.bind(null,456)),"v-131b9357":()=>n.e(40).then(n.bind(null,457)),"v-a9ffe0fe":()=>n.e(46).then(n.bind(null,458)),"v-947f362a":()=>n.e(30).then(n.bind(null,459)),"v-749f316f":()=>n.e(29).then(n.bind(null,460)),"v-21b208b7":()=>n.e(64).then(n.bind(null,461)),"v-93d2a72a":()=>n.e(66).then(n.bind(null,462)),"v-2566e137":()=>n.e(67).then(n.bind(null,463)),"v-2494b4d7":()=>n.e(65).then(n.bind(null,464))};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)}},Os=n(22),ks=n.n(Os),Ts={mounted(){ks.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Qn.component(t.name)||ks.a.start(),n()}),this.$router.afterEach(()=>{ks.a.done(),this.isSidebarOpen=!1})}},Ps=n(89),Cs=n.n(Ps),Es=[gs,Ss,Ts,{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-73cb197f",path:"/integrate/node_red.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-73cb197f").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-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-29f81312",path:"/prerequisites/parts.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-29f81312").then(n)}},{name:"v-204c7852",path:"/prerequisites/devices.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-204c7852").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-2fe62c26",path:"/setitup/rf.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-2fe62c26").then(n)}},{name:"v-0d1e8e9e",path:"/setitup/lora.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-0d1e8e9e").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-bbb970d2",path:"/use/ble.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-bbb970d2").then(n)}},{name:"v-3043a2b9",path:"/use/boards.html",component:As,beforeEnter:(t,e,n)=>{fs("Layout","v-3043a2b9").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:4d6e7f 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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"Auto discovery",slug:"auto-discovery"},{level:2,title:"RTL_433 auto discovery specificity",slug:"rtl-433-auto-discovery-specificity"},{level:2,title:"MQTT Device Trigger and RF",slug:"mqtt-device-trigger-and-rf"},{level:2,title:"Manual integration examples",slug:"manual-integration-examples"},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"Community participation",frontmatter:{},regularPath:"/participate/community.html",relativePath:"participate/community.md",key:"v-2db1db37",path:"/participate/community.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"Supporting the project",frontmatter:{},regularPath:"/participate/support.html",relativePath:"participate/support.md",key:"v-f3fbff12",path:"/participate/support.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"Boards",frontmatter:{},regularPath:"/prerequisites/board.html",relativePath:"prerequisites/board.md",key:"v-01bee537",path:"/prerequisites/board.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"Broker",frontmatter:{},regularPath:"/prerequisites/broker.html",relativePath:"prerequisites/broker.md",key:"v-56e06d4d",path:"/prerequisites/broker.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"Controller",frontmatter:{},regularPath:"/prerequisites/controller.html",relativePath:"prerequisites/controller.md",key:"v-5e0eec87",path:"/prerequisites/controller.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:2,title:"ESP8266",slug:"esp8266"}],lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{title:"(Option 4) Build from the web",frontmatter:{},regularPath:"/upload/gitpod.html",relativePath:"upload/gitpod.md",key:"v-2c32e617",path:"/upload/gitpod.html",lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"AutoDiscovery compatible with OpenHAB (default: false)",slug:"autodiscovery-compatible-with-openhab-default-false"},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"Receiving data from RF signal",slug:"receiving-data-from-rf-signal"},{level:3,title:"Disabling Transmit function to safe a PIN",slug:"disabling-transmit-function-to-safe-a-pin"},{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"},{level:3,title:"Repeat the RF signal OpenMQTTGateway receive",slug:"repeat-the-rf-signal-openmqttgateway-receive"},{level:3,title:"Repeat the RF signal several times",slug:"repeat-the-rf-signal-several-times"},{level:3,title:"Set Transmit and Receive Frequency and Transmit Power of CC1101 Transceiver",slug:"set-transmit-and-receive-frequency-and-transmit-power-of-cc1101-transceiver"},{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-2"},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"Logging",slug:"logging"}],lastUpdated:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3},{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:"1/3/2025, 3:29:26 PM",lastUpdatedTimestamp:1735918166e3}],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,418))),Qn.component("Badge",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,419))),Qn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,414))),Qn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,415)));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 736a9f204f..4fe78dfbbb 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 8aee5bb006..c0716ed09e 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 cbbd8c91d9..4044ad6035 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 f10b4bcd37..1d03dd8ebc 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 97eaf0b3f4..1f5ec745af 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 fea70982b0..66ab41b203 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 4e1e5513a5..2d180e4552 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 ae010fd0a9..a724042bf0 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 3627a03994..c1bf88987b 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 d77a36be7c..a37aba10a3 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 f144f816fa..d3f871d9cf 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 01ee722cba..92285a960e 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 4cb64d0d55..cbe6c282b7 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 66024e5b79..ec46a5eb7c 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 06eb67adf5..ed22ee483b 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 07a98dd86e..9342e412cc 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 83f906e1aa..67dddc5fd2 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 2402380c9c..d6afd927e2 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 6d8c1da125..47ba7ffb99 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 0d661160dc..a7d5bab0e1 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 72b06af22b..2a5caf5b93 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 12caaa9938..75bc088a28 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 d980b1aca4..00adb56a0e 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 d01393ea76..51f800bef1 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 4540139eb1..1ec543e24f 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 49348a0665..58eae5e931 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 42e9c7c9ce..d15e33aeb8 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 2717957a4d..919aa364d3 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 fbf074fbcd..3297e20fae 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 07b32f5931..d631e13e5c 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 aa0d67b36e..9662ed21e1 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 7e4ce16b77..d7a32a2924 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 4c124a28ef..3d2495a848 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 4e8d49484f..aa4144622a 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 286b1f2b97..975ba2e257 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 22efd7733d..63e3cfd229 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 672c88f86d..92e1655a42 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-somfy-cc1101-firmware.bin b/dev/firmware_build/esp32dev-somfy-cc1101-firmware.bin index 18355edb9c..74df91664c 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 24be48e352..c7849dcc20 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 7984f7c80a..84bdd63977 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 8f000e4db3..32156dba1d 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 f5a8be562e..cc33d16d75 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 5cb9b260cd..6c2768540b 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 a99517b383..51bed5d46f 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 0a0e3db523..b8c1138d57 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 d3f22c79f5..76586e86b9 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 dce2275c44..630092be86 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 3467b2828c..9fbe4a4f66 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 a837236c0e..88406847a3 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 347536c077..83756e6e0b 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 e064cbab7f..625a852ecf 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/shelly-plus1-firmware.bin b/dev/firmware_build/shelly-plus1-firmware.bin index 0d14c594cf..1ec68519fb 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 d5d230575e..7efa2e4724 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 3e2d3efef1..4eeee8c6b3 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 69e4a347d1..4e15224d6d 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 4c549e633a..a0c2c1669b 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 0e738ab721..802a94c880 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 8ddfb289fa..31f879f1bd 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 4d4f7c46b8..1d5b863170 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 4f340379c2..849f2e2114 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 a16a33931d..1334d8d408 100644 --- a/dev/index.html +++ b/dev/index.html @@ -19,7 +19,7 @@ - + @@ -106,6 +106,6 @@ →

- + diff --git a/dev/integrate/aws_iot.html b/dev/integrate/aws_iot.html index 7b53916bf8..83f7b80691 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 24ca75e00a..e03d94ed4e 100644 --- a/dev/integrate/home_assistant.html +++ b/dev/integrate/home_assistant.html @@ -19,7 +19,7 @@ - + @@ -288,6 +288,6 @@ →

- + diff --git a/dev/integrate/jeedom.html b/dev/integrate/jeedom.html index ff46a07c25..b114ffc84f 100644 --- a/dev/integrate/jeedom.html +++ b/dev/integrate/jeedom.html @@ -19,7 +19,7 @@ - + @@ -112,6 +112,6 @@ →

- + diff --git a/dev/integrate/node_red.html b/dev/integrate/node_red.html index 10e5a7266e..67d2240a42 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 79246336e6..fb12f7ca9a 100644 --- a/dev/integrate/openhab2.html +++ b/dev/integrate/openhab2.html @@ -19,7 +19,7 @@ - + @@ -143,6 +143,6 @@ →

- + diff --git a/dev/integrate/openhab3.html b/dev/integrate/openhab3.html index a61dd1256c..b616fe37d6 100644 --- a/dev/integrate/openhab3.html +++ b/dev/integrate/openhab3.html @@ -19,7 +19,7 @@ - + @@ -110,6 +110,6 @@ →

- + diff --git a/dev/participate/adding-protocols.html b/dev/participate/adding-protocols.html index b9f450fc3a..d8a9dfe724 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 c9a0a388b9..340d2c1528 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 624a0aa982..e8b512fef3 100644 --- a/dev/participate/development.html +++ b/dev/participate/development.html @@ -19,7 +19,7 @@ - + @@ -133,6 +133,6 @@ →

- + diff --git a/dev/participate/support.html b/dev/participate/support.html index 8054ef6192..de110a2a04 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 bda4b443da..01031ddfc4 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.

- + diff --git a/dev/prerequisites/board.html b/dev/prerequisites/board.html index ad586e60b6..0cf5080d51 100644 --- a/dev/prerequisites/board.html +++ b/dev/prerequisites/board.html @@ -19,7 +19,7 @@ - + @@ -111,6 +111,6 @@ →

- + diff --git a/dev/prerequisites/broker.html b/dev/prerequisites/broker.html index 778888b637..5ac0f735a5 100644 --- a/dev/prerequisites/broker.html +++ b/dev/prerequisites/broker.html @@ -19,7 +19,7 @@ - + @@ -110,6 +110,6 @@ →

- + diff --git a/dev/prerequisites/controller.html b/dev/prerequisites/controller.html index 30c61e519b..89eb1d1c11 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 478cdf8863..976d6637fb 100644 --- a/dev/prerequisites/devices.html +++ b/dev/prerequisites/devices.html @@ -19,7 +19,7 @@ - + @@ -110,6 +110,6 @@ →

- + diff --git a/dev/prerequisites/parts.html b/dev/prerequisites/parts.html index 7a6c79d1c4..8d49b0a9b0 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 91fc1a4f9b..5121c7cd8b 100644 --- a/dev/setitup/actuators.html +++ b/dev/setitup/actuators.html @@ -19,7 +19,7 @@ - + @@ -112,6 +112,6 @@ →

- + diff --git a/dev/setitup/ble.html b/dev/setitup/ble.html index ff5c8b0379..19a592d587 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 8894206a2d..58423bdca1 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 94c6d0b61e..6d85f759c2 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 e9bc230771..c3b42db8cc 100644 --- a/dev/setitup/lora.html +++ b/dev/setitup/lora.html @@ -19,7 +19,7 @@ - + @@ -109,6 +109,6 @@ →

- + diff --git a/dev/setitup/rf.html b/dev/setitup/rf.html index c53c5602b4..4084f35e82 100644 --- a/dev/setitup/rf.html +++ b/dev/setitup/rf.html @@ -19,7 +19,7 @@ - + @@ -110,6 +110,6 @@ →

- + diff --git a/dev/setitup/sensors.html b/dev/setitup/sensors.html index 9e6916a11f..bb58f56421 100644 --- a/dev/setitup/sensors.html +++ b/dev/setitup/sensors.html @@ -19,7 +19,7 @@ - + @@ -109,6 +109,6 @@ →

- + diff --git a/dev/setitup/serial.html b/dev/setitup/serial.html index 5cfca87229..4e52f9f7a6 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 89958e4618..1b03f3f64a 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-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/home_assistant.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/aws_iot.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/jeedom.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/node_red.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/openhab2.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/openhab3.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/adding-protocols.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/community.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/development.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/support.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/board.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/broker.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/M5.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/devices.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/controller.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/parts.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/actuators.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/ble.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/ir.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/lora.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/gsm.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/rf.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/sensors.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/serial.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/builds.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/advanced-configuration.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/gitpod.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/portal.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/web-install.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/binaries.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/actuators.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/troubleshoot.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/ble.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/boards.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/gateway.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/gsm.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/displays.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/ir.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/lora.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/rf.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/rfm69.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/sensors.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/webui.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/serial.html2025-01-03T15:29:26.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-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/home_assistant.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/aws_iot.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/jeedom.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/openhab2.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/node_red.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/integrate/openhab3.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/community.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/adding-protocols.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/development.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/M5.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/participate/support.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/board.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/broker.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/controller.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/parts.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/prerequisites/devices.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/actuators.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/ble.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/gsm.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/ir.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/rf.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/lora.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/sensors.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/setitup/serial.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/advanced-configuration.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/binaries.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/builds.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/gitpod.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/troubleshoot.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/portal.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/upload/web-install.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/actuators.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/ble.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/boards.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/displays.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/gateway.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/gsm.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/ir.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/rf.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/lora.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/rfm69.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/serial.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/webui.html2025-01-03T15:29:26.000Zdailyhttps://docs.openmqttgateway.com/dev/use/sensors.html2025-01-03T15:29:26.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 f21a4db4c7..ee5d0f51ff 100644 --- a/dev/upload/advanced-configuration.html +++ b/dev/upload/advanced-configuration.html @@ -19,7 +19,7 @@ - + @@ -130,6 +130,6 @@ →

- + diff --git a/dev/upload/binaries.html b/dev/upload/binaries.html index 5100e366c8..920c57ddd5 100644 --- a/dev/upload/binaries.html +++ b/dev/upload/binaries.html @@ -19,7 +19,7 @@ - + @@ -147,6 +147,6 @@ →

- + diff --git a/dev/upload/builds.html b/dev/upload/builds.html index e9a617e486..4a64dc017d 100644 --- a/dev/upload/builds.html +++ b/dev/upload/builds.html @@ -19,7 +19,7 @@ - + @@ -235,6 +235,6 @@ →

- + diff --git a/dev/upload/gitpod.html b/dev/upload/gitpod.html index 476c36410a..7fe2d4c5cf 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 7954a04bc8..8d1c221907 100644 --- a/dev/upload/portal.html +++ b/dev/upload/portal.html @@ -19,7 +19,7 @@ - + @@ -131,6 +131,6 @@ →

- + diff --git a/dev/upload/troubleshoot.html b/dev/upload/troubleshoot.html index 6fa338de79..8a3ac5fffb 100644 --- a/dev/upload/troubleshoot.html +++ b/dev/upload/troubleshoot.html @@ -19,7 +19,7 @@ - + @@ -124,6 +124,6 @@ →

- + diff --git a/dev/upload/web-install.html b/dev/upload/web-install.html index c13810647e..a4f200da04 100644 --- a/dev/upload/web-install.html +++ b/dev/upload/web-install.html @@ -19,7 +19,7 @@ - + @@ -288,6 +288,6 @@ →

- + diff --git a/dev/use/actuators.html b/dev/use/actuators.html index ce7c66a1ae..d8dfd268d9 100644 --- a/dev/use/actuators.html +++ b/dev/use/actuators.html @@ -19,7 +19,7 @@ - + @@ -145,6 +145,6 @@ →

- + diff --git a/dev/use/ble.html b/dev/use/ble.html index 8a3d9f15e1..e68812178f 100644 --- a/dev/use/ble.html +++ b/dev/use/ble.html @@ -19,7 +19,7 @@ - + @@ -246,6 +246,6 @@ →

- + diff --git a/dev/use/boards.html b/dev/use/boards.html index 57164cea3a..54f13dbef3 100644 --- a/dev/use/boards.html +++ b/dev/use/boards.html @@ -19,7 +19,7 @@ - + @@ -109,6 +109,6 @@ →

- + diff --git a/dev/use/displays.html b/dev/use/displays.html index a9c3f314f8..ba2fb3d4e4 100644 --- a/dev/use/displays.html +++ b/dev/use/displays.html @@ -19,7 +19,7 @@ - + @@ -131,6 +131,6 @@ →

- + diff --git a/dev/use/gateway.html b/dev/use/gateway.html index 0ad34e8ee4..36b6e3b83a 100644 --- a/dev/use/gateway.html +++ b/dev/use/gateway.html @@ -19,7 +19,7 @@ - + @@ -229,6 +229,6 @@ →

- + diff --git a/dev/use/gsm.html b/dev/use/gsm.html index 9523350758..ec419af3f4 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 d6e2c9f9ca..2ffad37674 100644 --- a/dev/use/ir.html +++ b/dev/use/ir.html @@ -19,7 +19,7 @@ - + @@ -130,6 +130,6 @@ →

- + diff --git a/dev/use/lora.html b/dev/use/lora.html index 25b15766b3..f8be202bd9 100644 --- a/dev/use/lora.html +++ b/dev/use/lora.html @@ -19,7 +19,7 @@ - + @@ -119,6 +119,6 @@ →

- + diff --git a/dev/use/rf.html b/dev/use/rf.html index 3f20fd047c..bce4a8b395 100644 --- a/dev/use/rf.html +++ b/dev/use/rf.html @@ -19,7 +19,7 @@ - + @@ -154,6 +154,6 @@ →

- + diff --git a/dev/use/rfm69.html b/dev/use/rfm69.html index a2303a5719..97a3e8f3a8 100644 --- a/dev/use/rfm69.html +++ b/dev/use/rfm69.html @@ -19,7 +19,7 @@ - + @@ -114,6 +114,6 @@ →

- + diff --git a/dev/use/sensors.html b/dev/use/sensors.html index 41c71dfc65..7b50771f0c 100644 --- a/dev/use/sensors.html +++ b/dev/use/sensors.html @@ -19,7 +19,7 @@ - + @@ -113,6 +113,6 @@ →

- + diff --git a/dev/use/serial.html b/dev/use/serial.html index 309d44ef8d..ed24fef990 100644 --- a/dev/use/serial.html +++ b/dev/use/serial.html @@ -19,7 +19,7 @@ - + @@ -118,6 +118,6 @@ →

- + diff --git a/dev/use/webui.html b/dev/use/webui.html index ed10358a7d..d893856da9 100644 --- a/dev/use/webui.html +++ b/dev/use/webui.html @@ -19,7 +19,7 @@ - + @@ -108,6 +108,6 @@ →

- +