diff --git a/404.html b/404.html index 1a809faf..9f449be7 100644 --- a/404.html +++ b/404.html @@ -4,10 +4,10 @@ Lobaro Documentation - - + + -
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/assets/js/010bb5b4.69938f5c.js b/assets/js/010bb5b4.69938f5c.js new file mode 100644 index 00000000..4b1625d2 --- /dev/null +++ b/assets/js/010bb5b4.69938f5c.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1417],{6813:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/wMBusV4_Batterie.ab682ff.1600.png 1600w,"+t.p+"assets/images/ideal-img/wMBusV4_Batterie.34b2f38.1752.png 1752w",images:[{path:t.p+"assets/images/ideal-img/wMBusV4_Batterie.ab682ff.1600.png",width:1600,height:1094},{path:t.p+"assets/images/ideal-img/wMBusV4_Batterie.34b2f38.1752.png",width:1752,height:1198}],src:t.p+"assets/images/ideal-img/wMBusV4_Batterie.ab682ff.1600.png",toString:function(){return t.p+"assets/images/ideal-img/wMBusV4_Batterie.ab682ff.1600.png"},placeholder:void 0,width:1600,height:1094},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAA7ElEQVR4nE2Qv0rDYADE+wL6DPosugvdpGvFQKeCddOAuLgaV0Nnwa+LhEx5gCCIYrYElDaJiUmhfrbk/09iEDy4m35wx/WapmG5XJIkCZv1N/JLspYbVnKFlJKyLGnVK4oCMbvn5fGVqwcV5XaMoo8xnwze3Hfmi3kHZlmGmAk8x+V4qrCj7rJ3tM9QGaJda/i+34F5nmOYBq7jMpqO2D7dYnA4oH/QRwhBGIb/qwXOs4Nm3nB2d4l6cc7kZIKu6wRB0IHtWMuysG0bf+ETf3ySpilxHON5HlEUdeBvAlVV0TQ1dd25faP1n34AxpLtiFb6s4wAAAAASUVORK5CYII="}},1810:(e,s,t)=>{"use strict";t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>n,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var i=t(4848),a=t(8453);const r={sidebar_position:0},n="Wmbus Gateway V4",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/index",title:"Wmbus Gateway V4",description:"Ein Bild",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"allDocSidebar",previous:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow"},next:{title:"Description",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc"}},d={},l=[{value:"Features",id:"features",level:2}];function c(e){const s={h1:"h1",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components},{Image:r}=s;return r||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h1,{id:"wmbus-gateway-v4",children:"Wmbus Gateway V4"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Ein Bild",src:t(8503).A+"",width:"1738",height:"1664"})}),"\n",(0,i.jsx)(r,{alt:"A battery powered V4 Gateways",img:t(6813),style:{width:"60%",padding:"10px",marginInline:"auto"}}),"\n",(0,i.jsx)(s.h2,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Type: LOB-GW-HYB-WMBUS-BL"}),"\n",(0,i.jsx)(s.li,{children:"Upload via NB-IoT mobile radio (LTE bands: 3, 8, 20)"}),"\n",(0,i.jsx)(s.li,{children:"SIM card (4FF / Nano) - not included"}),"\n",(0,i.jsx)(s.li,{children:"Alternative upload via LoRaWAN v1.0.2 (EU-868)"}),"\n",(0,i.jsx)(s.li,{children:"Compatible with wireless M-Bus S1, C1/T1 modes (868 MHz), OMS v3 & v4"}),"\n",(0,i.jsx)(s.li,{children:"Compatible with Sensus RF (BUP, 868 MHz)"}),"\n",(0,i.jsx)(s.li,{children:"Upload of up to 500 different meters"}),"\n",(0,i.jsx)(s.li,{children:"Power supply: 3.3-5V via JST XH connector"}),"\n",(0,i.jsx)(s.li,{children:"Matching battery pack - not included"}),"\n",(0,i.jsx)(s.li,{children:"IP66 housing: 151 (l) x 125 mm (w) x 60mm (h)"}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8503:(e,s,t)=>{"use strict";t.d(s,{A:()=>i});const i=t.p+"assets/images/GW_V4-485fbf0b07de741dbf708a351d3dd578.png"},8453:(e,s,t)=>{"use strict";t.d(s,{R:()=>n,x:()=>o});var i=t(6540);const a={},r=i.createContext(a);function n(e){const s=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:n(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/010bb5b4.c87afbe5.js b/assets/js/010bb5b4.c87afbe5.js deleted file mode 100644 index bd430b53..00000000 --- a/assets/js/010bb5b4.c87afbe5.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1417],{6813:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/wMBusV4_Batterie.ab682ff.1600.png 1600w,"+t.p+"assets/images/ideal-img/wMBusV4_Batterie.34b2f38.1752.png 1752w",images:[{path:t.p+"assets/images/ideal-img/wMBusV4_Batterie.ab682ff.1600.png",width:1600,height:1094},{path:t.p+"assets/images/ideal-img/wMBusV4_Batterie.34b2f38.1752.png",width:1752,height:1198}],src:t.p+"assets/images/ideal-img/wMBusV4_Batterie.ab682ff.1600.png",toString:function(){return t.p+"assets/images/ideal-img/wMBusV4_Batterie.ab682ff.1600.png"},placeholder:void 0,width:1600,height:1094},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAA7ElEQVR4nE2Qv0rDYADE+wL6DPosugvdpGvFQKeCddOAuLgaV0Nnwa+LhEx5gCCIYrYElDaJiUmhfrbk/09iEDy4m35wx/WapmG5XJIkCZv1N/JLspYbVnKFlJKyLGnVK4oCMbvn5fGVqwcV5XaMoo8xnwze3Hfmi3kHZlmGmAk8x+V4qrCj7rJ3tM9QGaJda/i+34F5nmOYBq7jMpqO2D7dYnA4oH/QRwhBGIb/qwXOs4Nm3nB2d4l6cc7kZIKu6wRB0IHtWMuysG0bf+ETf3ySpilxHON5HlEUdeBvAlVV0TQ1dd25faP1n34AxpLtiFb6s4wAAAAASUVORK5CYII="}},1810:(e,s,t)=>{"use strict";t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>n,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var i=t(4848),a=t(8453);const r={sidebar_position:0},n="Wmbus Gateway V4",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/index",title:"Wmbus Gateway V4",description:"Ein Bild",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"productsSidebar",previous:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow"},next:{title:"Description",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc"}},d={},l=[{value:"Features",id:"features",level:2}];function c(e){const s={h1:"h1",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components},{Image:r}=s;return r||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h1,{id:"wmbus-gateway-v4",children:"Wmbus Gateway V4"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Ein Bild",src:t(8503).A+"",width:"1738",height:"1664"})}),"\n",(0,i.jsx)(r,{alt:"A battery powered V4 Gateways",img:t(6813),style:{width:"60%",padding:"10px",marginInline:"auto"}}),"\n",(0,i.jsx)(s.h2,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Type: LOB-GW-HYB-WMBUS-BL"}),"\n",(0,i.jsx)(s.li,{children:"Upload via NB-IoT mobile radio (LTE bands: 3, 8, 20)"}),"\n",(0,i.jsx)(s.li,{children:"SIM card (4FF / Nano) - not included"}),"\n",(0,i.jsx)(s.li,{children:"Alternative upload via LoRaWAN v1.0.2 (EU-868)"}),"\n",(0,i.jsx)(s.li,{children:"Compatible with wireless M-Bus S1, C1/T1 modes (868 MHz), OMS v3 & v4"}),"\n",(0,i.jsx)(s.li,{children:"Compatible with Sensus RF (BUP, 868 MHz)"}),"\n",(0,i.jsx)(s.li,{children:"Upload of up to 500 different meters"}),"\n",(0,i.jsx)(s.li,{children:"Power supply: 3.3-5V via JST XH connector"}),"\n",(0,i.jsx)(s.li,{children:"Matching battery pack - not included"}),"\n",(0,i.jsx)(s.li,{children:"IP66 housing: 151 (l) x 125 mm (w) x 60mm (h)"}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8503:(e,s,t)=>{"use strict";t.d(s,{A:()=>i});const i=t.p+"assets/images/GW_V4-485fbf0b07de741dbf708a351d3dd578.png"},8453:(e,s,t)=>{"use strict";t.d(s,{R:()=>n,x:()=>o});var i=t(6540);const a={},r=i.createContext(a);function n(e){const s=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:n(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/01a49a4f.75a6a9dc.js b/assets/js/01a49a4f.75a6a9dc.js deleted file mode 100644 index dda0539f..00000000 --- a/assets/js/01a49a4f.75a6a9dc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[185],{8794:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=t(4848),i=t(8453);const o={sidebar_position:4,displayed_sidebar:"configurationSidebar",title:"LTE Network Configuration"},s="LTE Network Configuration",l={id:"configuration/lte-network-configuration",title:"LTE Network Configuration",description:"In order for the Lobaro devices to be able to dial into the mobile network, it may be necessary to configure the network",source:"@site/docs/configuration/lte-network-configuration.md",sourceDirName:"configuration",slug:"/configuration/lte-network-configuration",permalink:"/iot/configuration/lte-network-configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/lte-network-configuration.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,displayed_sidebar:"configurationSidebar",title:"LTE Network Configuration"},sidebar:"configurationSidebar",previous:{title:"CRON Configuration",permalink:"/iot/configuration/cron-configuration"},next:{title:"OBIS-Code Configuration",permalink:"/iot/configuration/obis-code-configuration"}},d={},c=[{value:"Configuration Parameters",id:"configuration-parameters",level:2},{value:"APN",id:"apn",level:3},{value:"Operator",id:"operator",level:3},{value:"Band",id:"band",level:3},{value:"List of common APN and Operators",id:"list-of-common-apn-and-operators",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"lte-network-configuration",children:"LTE Network Configuration"}),"\n",(0,r.jsx)(n.p,{children:"In order for the Lobaro devices to be able to dial into the mobile network, it may be necessary to configure the network\nrelated parameters correctly."}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["Lobaro devices normally perform a network selection based on the profile stored on the SIM card inserted in the device.\nThis means that in most case the mobile ",(0,r.jsx)(n.code,{children:"operator"})," and ",(0,r.jsx)(n.code,{children:"band"})," ",(0,r.jsx)(n.strong,{children:"have\nnot"})," to be configured since the devices perform an autodetect based on internal metrics. In some cases it may be\nbeneficial\nto set the device to use a specific operator, then the operator, and band configuration parameters of the device comes\ninto play."]}),(0,r.jsxs)(n.p,{children:["In contrast to this the ",(0,r.jsx)(n.code,{children:"apn"})," parameter should be set correctly in any case. The ",(0,r.jsx)(n.code,{children:"*"})," (autodetect) feature will only work\nfor few sim cards, like ",(0,r.jsx)(n.strong,{children:"1NCE"})," and ",(0,r.jsx)(n.strong,{children:"Vodafone Easy Connect"})," SIM cards."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration-parameters",children:"Configuration Parameters"}),"\n",(0,r.jsx)(n.p,{children:"Our cellular IoT (LTE-M or NB-IoT) devices usually allow the configuration of"}),"\n",(0,r.jsx)(n.h3,{id:"apn",children:"APN"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Should be configured to SIM specific value, e.g. ",(0,r.jsx)(n.code,{children:"iot.1nce.net"})]}),"\n",(0,r.jsxs)(n.li,{children:["Default: ",(0,r.jsx)(n.code,{children:"*"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["APN Autodetect -> Modem uses internally known APN","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Will only work for 1NCE and Vodafone EasyConnect"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["APN autodetect not possible: Modem falls back to ",(0,r.jsx)(n.code,{children:"Not set"})," (see below)"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Not set"})," -> Modem uses SIM internal information"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"operator",children:"Operator"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Usually ",(0,r.jsx)(n.strong,{children:"no need"})," to configure it explicitly to some specific MCC+MNC operator code like ",(0,r.jsx)(n.code,{children:"26201"})]}),"\n",(0,r.jsxs)(n.li,{children:["Default: ",(0,r.jsx)(n.code,{children:"Not set"})," -> Modem performs automatic network selection"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"band",children:"Band"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Usually ",(0,r.jsx)(n.strong,{children:"no need"})," to configure it explicitly"]}),"\n",(0,r.jsxs)(n.li,{children:["Default: ",(0,r.jsx)(n.code,{children:"Not set"})," -> Modem will use one of these bands ",(0,r.jsx)(n.code,{children:"3,8,20"})]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Not set"})," denotes that the configuration parameter field is empty."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["If you decide to configure the ",(0,r.jsx)(n.code,{children:"operator"})," and/or ",(0,r.jsx)(n.code,{children:"band"})," you may decrease the devices coverage and ability to find\nalternative networks at a specific location. Use this configuration parameters only if you know what you are doing!"]})}),"\n",(0,r.jsxs)(n.p,{children:["For initial configuration of these parameters please use the ",(0,r.jsx)(n.a,{href:"/iot/configuration/lobaro-config-tool",children:"Lobaro Maintenance Tool"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"list-of-common-apn-and-operators",children:"List of common APN and Operators"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"MCC = Mobile Country Code"}),"\n",(0,r.jsx)(n.li,{children:"MNC = Mobile Network Code"}),"\n",(0,r.jsx)(n.li,{children:"Operator = MCC+MNC (Config Parameter for Lobaro Devices)"}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Network"}),(0,r.jsx)(n.th,{children:"Country"}),(0,r.jsx)(n.th,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"Operator"})}),(0,r.jsx)(n.th,{style:{textAlign:"center"},children:"MCC"}),(0,r.jsx)(n.th,{style:{textAlign:"center"},children:"MNC"}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"APN"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Deutsche Telekom"}),(0,r.jsx)(n.td,{children:"Germany"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"26201"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"262"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"01"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"internet.m2mportal.de"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"1NCE"}),(0,r.jsx)(n.td,{children:"Germany"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"*"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"}}),(0,r.jsx)(n.td,{style:{textAlign:"center"}}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"iot.1nce.net"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Vodafone Deutschland"}),(0,r.jsx)(n.td,{children:"Germany"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"26202"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"262"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"02"}),(0,r.jsxs)(n.td,{children:["IoT Easy Connect: ",(0,r.jsx)(n.strong,{children:"lpwa.vodafone.com"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Telefonica (O2)"}),(0,r.jsx)(n.td,{children:"Germany"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"26203"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"262"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"03"}),(0,r.jsxs)(n.td,{children:["IoT Sim Prepaid: ",(0,r.jsx)(n.strong,{children:"iotde.telefonica.com"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"T-Mobile Austria GmbH (Magenta)"}),(0,r.jsx)(n.td,{children:"Austria"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"23203"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"232"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"03"}),(0,r.jsx)(n.td,{children:"?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"TDC A/S"}),(0,r.jsx)(n.td,{children:"Denmark"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"23801"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"238"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"01"}),(0,r.jsx)(n.td,{children:"?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Telenor Denmark"}),(0,r.jsx)(n.td,{children:"Denmark"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"23802"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"238"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"02"}),(0,r.jsx)(n.td,{children:"?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Telia DK"}),(0,r.jsx)(n.td,{children:"Denmark"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"23820"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"238"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"20"}),(0,r.jsx)(n.td,{children:"?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Tele2"}),(0,r.jsx)(n.td,{children:"Sweden"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"24007"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"240"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"07"}),(0,r.jsx)(n.td,{children:"?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"COM4"}),(0,r.jsx)(n.td,{children:"Norway"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"24202"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"242"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"02"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"com4"})})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["Other provider codes and deployed bands are listed in\na ",(0,r.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Mobile_Network_Codes_in_ITU_region_2xx_(Europe)",children:"list of mobile operator codes"})," on\nWikipedia."]}),"\n",(0,r.jsx)(n.p,{children:"Additional information on operators and bands can be found here:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://halberdbastion.com/intelligence/mobile-networks",children:"halberdbastion.com"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://mcc-mnc.com/",children:"mcc-mnc.com"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>l});var r=t(6540);const i={},o=r.createContext(i);function s(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/01a49a4f.b962cd7f.js b/assets/js/01a49a4f.b962cd7f.js new file mode 100644 index 00000000..b2d0ebd1 --- /dev/null +++ b/assets/js/01a49a4f.b962cd7f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[185],{8794:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=t(4848),i=t(8453);const o={sidebar_position:4,title:"LTE Network Configuration"},s="LTE Network Configuration",l={id:"configuration/lte-network-configuration",title:"LTE Network Configuration",description:"In order for the Lobaro devices to be able to dial into the mobile network, it may be necessary to configure the network",source:"@site/docs/configuration/lte-network-configuration.md",sourceDirName:"configuration",slug:"/configuration/lte-network-configuration",permalink:"/iot/configuration/lte-network-configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/lte-network-configuration.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,title:"LTE Network Configuration"},sidebar:"allDocSidebar",previous:{title:"CRON Configuration",permalink:"/iot/configuration/cron-configuration"},next:{title:"OBIS-Code Configuration",permalink:"/iot/configuration/obis-code-configuration"}},d={},c=[{value:"Configuration Parameters",id:"configuration-parameters",level:2},{value:"APN",id:"apn",level:3},{value:"Operator",id:"operator",level:3},{value:"Band",id:"band",level:3},{value:"List of common APN and Operators",id:"list-of-common-apn-and-operators",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"lte-network-configuration",children:"LTE Network Configuration"}),"\n",(0,r.jsx)(n.p,{children:"In order for the Lobaro devices to be able to dial into the mobile network, it may be necessary to configure the network\nrelated parameters correctly."}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["Lobaro devices normally perform a network selection based on the profile stored on the SIM card inserted in the device.\nThis means that in most case the mobile ",(0,r.jsx)(n.code,{children:"operator"})," and ",(0,r.jsx)(n.code,{children:"band"})," ",(0,r.jsx)(n.strong,{children:"have\nnot"})," to be configured since the devices perform an autodetect based on internal metrics. In some cases it may be\nbeneficial\nto set the device to use a specific operator, then the operator, and band configuration parameters of the device comes\ninto play."]}),(0,r.jsxs)(n.p,{children:["In contrast to this the ",(0,r.jsx)(n.code,{children:"apn"})," parameter should be set correctly in any case. The ",(0,r.jsx)(n.code,{children:"*"})," (autodetect) feature will only work\nfor few sim cards, like ",(0,r.jsx)(n.strong,{children:"1NCE"})," and ",(0,r.jsx)(n.strong,{children:"Vodafone Easy Connect"})," SIM cards."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration-parameters",children:"Configuration Parameters"}),"\n",(0,r.jsx)(n.p,{children:"Our cellular IoT (LTE-M or NB-IoT) devices usually allow the configuration of"}),"\n",(0,r.jsx)(n.h3,{id:"apn",children:"APN"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Should be configured to SIM specific value, e.g. ",(0,r.jsx)(n.code,{children:"iot.1nce.net"})]}),"\n",(0,r.jsxs)(n.li,{children:["Default: ",(0,r.jsx)(n.code,{children:"*"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["APN Autodetect -> Modem uses internally known APN","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Will only work for 1NCE and Vodafone EasyConnect"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["APN autodetect not possible: Modem falls back to ",(0,r.jsx)(n.code,{children:"Not set"})," (see below)"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Not set"})," -> Modem uses SIM internal information"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"operator",children:"Operator"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Usually ",(0,r.jsx)(n.strong,{children:"no need"})," to configure it explicitly to some specific MCC+MNC operator code like ",(0,r.jsx)(n.code,{children:"26201"})]}),"\n",(0,r.jsxs)(n.li,{children:["Default: ",(0,r.jsx)(n.code,{children:"Not set"})," -> Modem performs automatic network selection"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"band",children:"Band"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Usually ",(0,r.jsx)(n.strong,{children:"no need"})," to configure it explicitly"]}),"\n",(0,r.jsxs)(n.li,{children:["Default: ",(0,r.jsx)(n.code,{children:"Not set"})," -> Modem will use one of these bands ",(0,r.jsx)(n.code,{children:"3,8,20"})]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Not set"})," denotes that the configuration parameter field is empty."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["If you decide to configure the ",(0,r.jsx)(n.code,{children:"operator"})," and/or ",(0,r.jsx)(n.code,{children:"band"})," you may decrease the devices coverage and ability to find\nalternative networks at a specific location. Use this configuration parameters only if you know what you are doing!"]})}),"\n",(0,r.jsxs)(n.p,{children:["For initial configuration of these parameters please use the ",(0,r.jsx)(n.a,{href:"/iot/configuration/lobaro-config-tool",children:"Lobaro Maintenance Tool"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"list-of-common-apn-and-operators",children:"List of common APN and Operators"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"MCC = Mobile Country Code"}),"\n",(0,r.jsx)(n.li,{children:"MNC = Mobile Network Code"}),"\n",(0,r.jsx)(n.li,{children:"Operator = MCC+MNC (Config Parameter for Lobaro Devices)"}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Network"}),(0,r.jsx)(n.th,{children:"Country"}),(0,r.jsx)(n.th,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"Operator"})}),(0,r.jsx)(n.th,{style:{textAlign:"center"},children:"MCC"}),(0,r.jsx)(n.th,{style:{textAlign:"center"},children:"MNC"}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"APN"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Deutsche Telekom"}),(0,r.jsx)(n.td,{children:"Germany"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"26201"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"262"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"01"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"internet.m2mportal.de"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"1NCE"}),(0,r.jsx)(n.td,{children:"Germany"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"*"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"}}),(0,r.jsx)(n.td,{style:{textAlign:"center"}}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"iot.1nce.net"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Vodafone Deutschland"}),(0,r.jsx)(n.td,{children:"Germany"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"26202"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"262"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"02"}),(0,r.jsxs)(n.td,{children:["IoT Easy Connect: ",(0,r.jsx)(n.strong,{children:"lpwa.vodafone.com"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Telefonica (O2)"}),(0,r.jsx)(n.td,{children:"Germany"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"26203"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"262"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"03"}),(0,r.jsxs)(n.td,{children:["IoT Sim Prepaid: ",(0,r.jsx)(n.strong,{children:"iotde.telefonica.com"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"T-Mobile Austria GmbH (Magenta)"}),(0,r.jsx)(n.td,{children:"Austria"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"23203"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"232"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"03"}),(0,r.jsx)(n.td,{children:"?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"TDC A/S"}),(0,r.jsx)(n.td,{children:"Denmark"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"23801"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"238"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"01"}),(0,r.jsx)(n.td,{children:"?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Telenor Denmark"}),(0,r.jsx)(n.td,{children:"Denmark"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"23802"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"238"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"02"}),(0,r.jsx)(n.td,{children:"?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Telia DK"}),(0,r.jsx)(n.td,{children:"Denmark"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"23820"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"238"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"20"}),(0,r.jsx)(n.td,{children:"?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Tele2"}),(0,r.jsx)(n.td,{children:"Sweden"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"24007"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"240"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"07"}),(0,r.jsx)(n.td,{children:"?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"COM4"}),(0,r.jsx)(n.td,{children:"Norway"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:(0,r.jsx)(n.strong,{children:"24202"})}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"242"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"02"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"com4"})})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["Other provider codes and deployed bands are listed in\na ",(0,r.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Mobile_Network_Codes_in_ITU_region_2xx_(Europe)",children:"list of mobile operator codes"})," on\nWikipedia."]}),"\n",(0,r.jsx)(n.p,{children:"Additional information on operators and bands can be found here:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://halberdbastion.com/intelligence/mobile-networks",children:"halberdbastion.com"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://mcc-mnc.com/",children:"mcc-mnc.com"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>l});var r=t(6540);const i={},o=r.createContext(i);function s(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/02fe52da.9fcc59ea.js b/assets/js/02fe52da.9fcc59ea.js deleted file mode 100644 index 984203ed..00000000 --- a/assets/js/02fe52da.9fcc59ea.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[6322],{1556:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var n=r(4848),d=r(8453);const s={},i="Datasources",o={id:"platform/administration/datasources",title:"Datasources",description:"Data from IoT devices and other application can be received over different ports and protocols.",source:"@site/docs/platform/administration/datasources.md",sourceDirName:"platform/administration",slug:"/platform/administration/datasources",permalink:"/iot/platform/administration/datasources",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/datasources.md",tags:[],version:"current",frontMatter:{},sidebar:"cloudSidebar",previous:{title:"Changelog",permalink:"/iot/platform/administration/changelog"},next:{title:"Monitoring",permalink:"/iot/platform/administration/monitoring"}},c={},l=[{value:"Outgoing Integrations",id:"outgoing-integrations",level:2},{value:"Ports & Protocols",id:"ports--protocols",level:2},{value:"CoAP",id:"coap",level:3},{value:"Timings",id:"timings",level:4},{value:"Roadmap",id:"roadmap",level:3}];function a(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"datasources",children:"Datasources"}),"\n",(0,n.jsx)(t.p,{children:"Data from IoT devices and other application can be received over different ports and protocols."}),"\n",(0,n.jsx)(t.h2,{id:"outgoing-integrations",children:"Outgoing Integrations"}),"\n",(0,n.jsx)(t.p,{children:"Integrations are used to forward and receive data from other Systems."}),"\n",(0,n.jsx)(t.p,{children:'Beside Integrations that "Push" data to other systems, like HTTP, MQTT, SFTP, etc. there are also Integrations that work\nbi-directional like REST and LoRaWAN.'}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsxs)(t.p,{children:["See: ",(0,n.jsx)(t.a,{href:"../integrations",children:"Integrations"})]})}),"\n",(0,n.jsx)(t.h2,{id:"ports--protocols",children:"Ports & Protocols"}),"\n",(0,n.jsx)(t.p,{children:"Different ports and protocols can be configured to receive data from IoT Devices."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Datasource"}),(0,n.jsx)(t.th,{children:"Application Protocol"}),(0,n.jsx)(t.th,{children:"Transport Protocol"}),(0,n.jsx)(t.th,{children:"Default Port"}),(0,n.jsx)(t.th,{children:"Direction"}),(0,n.jsx)(t.th,{children:"Comment"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"REST"}),(0,n.jsx)(t.td,{children:"HTTPs"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"443"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{children:"REST API that can also be used upload sensor data"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"CoAP"}),(0,n.jsx)(t.td,{children:"CoAP"}),(0,n.jsx)(t.td,{children:"UDP"}),(0,n.jsx)(t.td,{children:"5683"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{children:"Used by Lobaro NB-IoT Devices, can be extended for other manufacturers"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"CoAPs"}),(0,n.jsx)(t.td,{children:"CoAPs"}),(0,n.jsx)(t.td,{children:"UDP"}),(0,n.jsx)(t.td,{children:"5684"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{children:"Used by Lobaro NB-IoT Devices, can be extended for other manufacturers"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Tekelek"}),(0,n.jsx)(t.td,{children:"Tekelek Proparitary"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"55345"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Dragino"}),(0,n.jsx)(t.td,{children:"Dragino Proeritary"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"5600"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Lobaro NB-IoT (deprecated)"}),(0,n.jsx)(t.td,{children:"Lobaro Properitary"}),(0,n.jsx)(t.td,{children:"UDP"}),(0,n.jsx)(t.td,{children:"1064"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{children:"Deprecated: Will be removed in future"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"HTTP (Push)"}),(0,n.jsx)(t.td,{children:"HTTP(s)"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"80/443"}),(0,n.jsx)(t.td,{children:"Out"}),(0,n.jsx)(t.td,{children:"Integration to forward data to external HTTP APIs"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"MQTT"}),(0,n.jsx)(t.td,{children:"MQTT"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"1883"}),(0,n.jsx)(t.td,{children:"Out"}),(0,n.jsx)(t.td,{children:"Integration to forward data to external MQTT Brokers"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"SFTP"}),(0,n.jsx)(t.td,{children:"SFTP"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"22"}),(0,n.jsx)(t.td,{children:"Out"}),(0,n.jsx)(t.td,{children:"Integration to forward data to external SFTP Servers"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"coap",children:"CoAP"}),"\n",(0,n.jsx)(t.h4,{id:"timings",children:"Timings"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Duration"}),(0,n.jsx)(t.th,{children:"Note"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Blockwise Transport"}),(0,n.jsx)(t.td,{children:"30 Seconds"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"DTLS Timeout"}),(0,n.jsx)(t.td,{children:"35 Seconds"}),(0,n.jsx)(t.td,{children:"Must be higher than on the device side (which is 30 seconds)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"DTLS Flight Interval"}),(0,n.jsx)(t.td,{children:"15 Seconds"}),(0,n.jsx)(t.td,{children:"FlightInterval controls how often we send outbound handshake messages"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"roadmap",children:"Roadmap"}),"\n",(0,n.jsx)(t.p,{children:"In future we are planning to implement more datasources"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Dragino CoAP"}),"\n",(0,n.jsx)(t.li,{children:"MQTT"}),"\n",(0,n.jsx)(t.li,{children:"Lightweight M2M (LWM2M)"}),"\n",(0,n.jsx)(t.li,{children:"... and other vendor specific protocols"}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,d.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>o});var n=r(6540);const d={},s=n.createContext(d);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/02fe52da.c1f16c87.js b/assets/js/02fe52da.c1f16c87.js new file mode 100644 index 00000000..71d5e6a3 --- /dev/null +++ b/assets/js/02fe52da.c1f16c87.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[6322],{1556:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var n=r(4848),d=r(8453);const s={},i="Datasources",o={id:"platform/administration/datasources",title:"Datasources",description:"Data from IoT devices and other application can be received over different ports and protocols.",source:"@site/docs/platform/administration/datasources.md",sourceDirName:"platform/administration",slug:"/platform/administration/datasources",permalink:"/iot/platform/administration/datasources",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/datasources.md",tags:[],version:"current",frontMatter:{},sidebar:"allDocSidebar",previous:{title:"Changelog",permalink:"/iot/platform/administration/changelog"},next:{title:"Monitoring",permalink:"/iot/platform/administration/monitoring"}},c={},l=[{value:"Outgoing Integrations",id:"outgoing-integrations",level:2},{value:"Ports & Protocols",id:"ports--protocols",level:2},{value:"CoAP",id:"coap",level:3},{value:"Timings",id:"timings",level:4},{value:"Roadmap",id:"roadmap",level:3}];function a(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"datasources",children:"Datasources"}),"\n",(0,n.jsx)(t.p,{children:"Data from IoT devices and other application can be received over different ports and protocols."}),"\n",(0,n.jsx)(t.h2,{id:"outgoing-integrations",children:"Outgoing Integrations"}),"\n",(0,n.jsx)(t.p,{children:"Integrations are used to forward and receive data from other Systems."}),"\n",(0,n.jsx)(t.p,{children:'Beside Integrations that "Push" data to other systems, like HTTP, MQTT, SFTP, etc. there are also Integrations that work\nbi-directional like REST and LoRaWAN.'}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsxs)(t.p,{children:["See: ",(0,n.jsx)(t.a,{href:"../integrations",children:"Integrations"})]})}),"\n",(0,n.jsx)(t.h2,{id:"ports--protocols",children:"Ports & Protocols"}),"\n",(0,n.jsx)(t.p,{children:"Different ports and protocols can be configured to receive data from IoT Devices."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Datasource"}),(0,n.jsx)(t.th,{children:"Application Protocol"}),(0,n.jsx)(t.th,{children:"Transport Protocol"}),(0,n.jsx)(t.th,{children:"Default Port"}),(0,n.jsx)(t.th,{children:"Direction"}),(0,n.jsx)(t.th,{children:"Comment"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"REST"}),(0,n.jsx)(t.td,{children:"HTTPs"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"443"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{children:"REST API that can also be used upload sensor data"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"CoAP"}),(0,n.jsx)(t.td,{children:"CoAP"}),(0,n.jsx)(t.td,{children:"UDP"}),(0,n.jsx)(t.td,{children:"5683"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{children:"Used by Lobaro NB-IoT Devices, can be extended for other manufacturers"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"CoAPs"}),(0,n.jsx)(t.td,{children:"CoAPs"}),(0,n.jsx)(t.td,{children:"UDP"}),(0,n.jsx)(t.td,{children:"5684"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{children:"Used by Lobaro NB-IoT Devices, can be extended for other manufacturers"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Tekelek"}),(0,n.jsx)(t.td,{children:"Tekelek Proparitary"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"55345"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Dragino"}),(0,n.jsx)(t.td,{children:"Dragino Proeritary"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"5600"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Lobaro NB-IoT (deprecated)"}),(0,n.jsx)(t.td,{children:"Lobaro Properitary"}),(0,n.jsx)(t.td,{children:"UDP"}),(0,n.jsx)(t.td,{children:"1064"}),(0,n.jsx)(t.td,{children:"In"}),(0,n.jsx)(t.td,{children:"Deprecated: Will be removed in future"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"HTTP (Push)"}),(0,n.jsx)(t.td,{children:"HTTP(s)"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"80/443"}),(0,n.jsx)(t.td,{children:"Out"}),(0,n.jsx)(t.td,{children:"Integration to forward data to external HTTP APIs"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"MQTT"}),(0,n.jsx)(t.td,{children:"MQTT"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"1883"}),(0,n.jsx)(t.td,{children:"Out"}),(0,n.jsx)(t.td,{children:"Integration to forward data to external MQTT Brokers"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"SFTP"}),(0,n.jsx)(t.td,{children:"SFTP"}),(0,n.jsx)(t.td,{children:"TCP"}),(0,n.jsx)(t.td,{children:"22"}),(0,n.jsx)(t.td,{children:"Out"}),(0,n.jsx)(t.td,{children:"Integration to forward data to external SFTP Servers"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"coap",children:"CoAP"}),"\n",(0,n.jsx)(t.h4,{id:"timings",children:"Timings"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Duration"}),(0,n.jsx)(t.th,{children:"Note"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Blockwise Transport"}),(0,n.jsx)(t.td,{children:"30 Seconds"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"DTLS Timeout"}),(0,n.jsx)(t.td,{children:"35 Seconds"}),(0,n.jsx)(t.td,{children:"Must be higher than on the device side (which is 30 seconds)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"DTLS Flight Interval"}),(0,n.jsx)(t.td,{children:"15 Seconds"}),(0,n.jsx)(t.td,{children:"FlightInterval controls how often we send outbound handshake messages"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"roadmap",children:"Roadmap"}),"\n",(0,n.jsx)(t.p,{children:"In future we are planning to implement more datasources"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Dragino CoAP"}),"\n",(0,n.jsx)(t.li,{children:"MQTT"}),"\n",(0,n.jsx)(t.li,{children:"Lightweight M2M (LWM2M)"}),"\n",(0,n.jsx)(t.li,{children:"... and other vendor specific protocols"}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,d.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>o});var n=r(6540);const d={},s=n.createContext(d);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/049cbdee.1e687859.js b/assets/js/049cbdee.1e687859.js deleted file mode 100644 index f05b2c9c..00000000 --- a/assets/js/049cbdee.1e687859.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[9675],{8573:(o,e,t)=>{o.exports={src:{srcSet:t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.2d6a1ca.1600.png 1600w,"+t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.1938ddd.2432.png 2432w,"+t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.981fe03.2656.png 2656w",images:[{path:t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.2d6a1ca.1600.png",width:1600,height:1123},{path:t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.1938ddd.2432.png",width:2432,height:1707},{path:t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.981fe03.2656.png",width:2656,height:1864}],src:t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.2d6a1ca.1600.png",toString:function(){return t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.2d6a1ca.1600.png"},placeholder:void 0,width:1600,height:1123},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAkklEQVR4nE2Nxw7DMAxD/f/f2Uu80nhI8ghYyIGDHgitR8p8joDDn7hSQa6EygKSBpaGbyXERCgkMFdmSO/ovWPMifu+Mecj7Z95whAxiAXSBK01jDFeKaBVQ8wZI7z3S7VW5JxBRBARMDNKKWtnFLDWwjm3DimldVBQDdrrzoQQFrTBnbDBN1HB/XonqNT0D/4AA6EOcJ07bQYAAAAASUVORK5CYII="}},4942:(o,e,t)=>{"use strict";t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var a=t(4848),n=t(8453);const r={sidebar_position:6,displayed_sidebar:"componentsSidebar",title:"Cellular IoT Communication"},i="Cellular IoT Communication",s={id:"components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol",title:"Cellular IoT Communication",description:"This page describes the possible uplink and downlink message contents when using NB-IoT or LTE-M (cellular IoT) as",source:"@site/docs/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol.md",sourceDirName:"components/firmware/app-nrf9160-wmbus",slug:"/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol",permalink:"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6,displayed_sidebar:"componentsSidebar",title:"Cellular IoT Communication"},sidebar:"componentsSidebar",previous:{title:"LoRaWAN Communication",permalink:"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol"},next:{title:"Changelog & Updates",permalink:"/iot/components/firmware/app-nrf9160-wmbus/changelog-download"}},l={},c=[];function m(o){const e={a:"a",admonition:"admonition",code:"code",h1:"h1",p:"p",strong:"strong",...(0,n.R)(),...o.components},{Image:r}=e;return r||function(o,e){throw new Error("Expected "+(e?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e.h1,{id:"cellular-iot-communication",children:"Cellular IoT Communication"}),"\n",(0,a.jsxs)(e.p,{children:["This page describes the possible uplink and downlink message contents when using NB-IoT or LTE-M (cellular IoT) as\ntechnology to communicate with the Lobaro IoT Platform, e.g. the\nfirmware ",(0,a.jsx)(e.code,{children:"WAN"})," ",(0,a.jsx)(e.a,{href:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter#general",children:"parameter"}),"\nmust be configured to ",(0,a.jsx)(e.code,{children:"lte"}),"."]}),"\n",(0,a.jsx)(r,{alt:"Lobaro Platform",img:t(8573),style:{width:"60%",paddingTop:"0px",paddingBottom:"8px"}}),"\n",(0,a.jsx)(e.p,{children:"Parsed and optionally decrypted Wireless M-BUS data can be viewed and further processed in the Lobaro IoT platform.\nThird party systems can be connected\nto retrieve any wireless M-BUS data and status information using the different available platform integrations. This\nmakes an easy data forwarding\ne.g. using MQTT, HTTP-Push or the REST interfaces possible without in-depth knowledge of the underlying actual\ncommunication of the platform with this firmware. Lobaro uses an optimized low power protocol secured by TLS for\ncommunication between\nthis firmware based products and our platform."}),"\n",(0,a.jsx)(e.admonition,{title:"SaaS instance Lobaro Platform",type:"tip",children:(0,a.jsxs)(e.p,{children:["The SaaS instance is available at ",(0,a.jsx)(e.a,{href:"https://platform.lobaro.com/",children:"platform.lobaro.com"}),". It's free for testing purposes.\nContact Lobaro to get access."]})}),"\n",(0,a.jsxs)(e.admonition,{title:"Lobaro platform is mandatory for this firmware",type:"info",children:[(0,a.jsx)(e.p,{children:"For this firmware the Lobaro IoT platform is mandatory. The low power protocol details to and from the products based on\nthis\nfirmware unfortunately will not be disclosed."}),(0,a.jsxs)(e.p,{children:["Other products have options for additional communication endpoints, e.g. a direct ",(0,a.jsx)(e.strong,{children:"MQTT"}),"\nintegration. These products are based on ",(0,a.jsx)(e.strong,{children:"different"})," firmware and marketed differently. Please refer to the product\ncatalogue and/or\ncontact Lobaro for available products with (Lobaro) platform free cellular IoT communication options."]})]})]})}function d(o={}){const{wrapper:e}={...(0,n.R)(),...o.components};return e?(0,a.jsx)(e,{...o,children:(0,a.jsx)(m,{...o})}):m(o)}},8453:(o,e,t)=>{"use strict";t.d(e,{R:()=>i,x:()=>s});var a=t(6540);const n={},r=a.createContext(n);function i(o){const e=a.useContext(r);return a.useMemo((function(){return"function"==typeof o?o(e):{...e,...o}}),[e,o])}function s(o){let e;return e=o.disableParentContext?"function"==typeof o.components?o.components(n):o.components||n:i(o.components),a.createElement(r.Provider,{value:e},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/049cbdee.a6be5ab2.js b/assets/js/049cbdee.a6be5ab2.js new file mode 100644 index 00000000..b8f8164b --- /dev/null +++ b/assets/js/049cbdee.a6be5ab2.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[9675],{8573:(o,e,t)=>{o.exports={src:{srcSet:t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.2d6a1ca.1600.png 1600w,"+t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.1938ddd.2432.png 2432w,"+t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.981fe03.2656.png 2656w",images:[{path:t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.2d6a1ca.1600.png",width:1600,height:1123},{path:t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.1938ddd.2432.png",width:2432,height:1707},{path:t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.981fe03.2656.png",width:2656,height:1864}],src:t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.2d6a1ca.1600.png",toString:function(){return t.p+"assets/images/ideal-img/Lobaro-Platform-wmbus.2d6a1ca.1600.png"},placeholder:void 0,width:1600,height:1123},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAkklEQVR4nE2Nxw7DMAxD/f/f2Uu80nhI8ghYyIGDHgitR8p8joDDn7hSQa6EygKSBpaGbyXERCgkMFdmSO/ovWPMifu+Mecj7Z95whAxiAXSBK01jDFeKaBVQ8wZI7z3S7VW5JxBRBARMDNKKWtnFLDWwjm3DimldVBQDdrrzoQQFrTBnbDBN1HB/XonqNT0D/4AA6EOcJ07bQYAAAAASUVORK5CYII="}},4942:(o,e,t)=>{"use strict";t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var a=t(4848),n=t(8453);const r={sidebar_position:6,title:"Cellular IoT Communication"},i="Cellular IoT Communication",s={id:"components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol",title:"Cellular IoT Communication",description:"This page describes the possible uplink and downlink message contents when using NB-IoT or LTE-M (cellular IoT) as",source:"@site/docs/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol.md",sourceDirName:"components/firmware/app-nrf9160-wmbus",slug:"/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol",permalink:"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6,title:"Cellular IoT Communication"},sidebar:"allDocSidebar",previous:{title:"LoRaWAN Communication",permalink:"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol"},next:{title:"Changelog & Updates",permalink:"/iot/components/firmware/app-nrf9160-wmbus/changelog-download"}},l={},c=[];function m(o){const e={a:"a",admonition:"admonition",code:"code",h1:"h1",p:"p",strong:"strong",...(0,n.R)(),...o.components},{Image:r}=e;return r||function(o,e){throw new Error("Expected "+(e?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e.h1,{id:"cellular-iot-communication",children:"Cellular IoT Communication"}),"\n",(0,a.jsxs)(e.p,{children:["This page describes the possible uplink and downlink message contents when using NB-IoT or LTE-M (cellular IoT) as\ntechnology to communicate with the Lobaro IoT Platform, e.g. the\nfirmware ",(0,a.jsx)(e.code,{children:"WAN"})," ",(0,a.jsx)(e.a,{href:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter#general",children:"parameter"}),"\nmust be configured to ",(0,a.jsx)(e.code,{children:"lte"}),"."]}),"\n",(0,a.jsx)(r,{alt:"Lobaro Platform",img:t(8573),style:{width:"60%",paddingTop:"0px",paddingBottom:"8px"}}),"\n",(0,a.jsx)(e.p,{children:"Parsed and optionally decrypted Wireless M-BUS data can be viewed and further processed in the Lobaro IoT platform.\nThird party systems can be connected\nto retrieve any wireless M-BUS data and status information using the different available platform integrations. This\nmakes an easy data forwarding\ne.g. using MQTT, HTTP-Push or the REST interfaces possible without in-depth knowledge of the underlying actual\ncommunication of the platform with this firmware. Lobaro uses an optimized low power protocol secured by TLS for\ncommunication between\nthis firmware based products and our platform."}),"\n",(0,a.jsx)(e.admonition,{title:"SaaS instance Lobaro Platform",type:"tip",children:(0,a.jsxs)(e.p,{children:["The SaaS instance is available at ",(0,a.jsx)(e.a,{href:"https://platform.lobaro.com/",children:"platform.lobaro.com"}),". It's free for testing purposes.\nContact Lobaro to get access."]})}),"\n",(0,a.jsxs)(e.admonition,{title:"Lobaro platform is mandatory for this firmware",type:"info",children:[(0,a.jsx)(e.p,{children:"For this firmware the Lobaro IoT platform is mandatory. The low power protocol details to and from the products based on\nthis\nfirmware unfortunately will not be disclosed."}),(0,a.jsxs)(e.p,{children:["Other products have options for additional communication endpoints, e.g. a direct ",(0,a.jsx)(e.strong,{children:"MQTT"}),"\nintegration. These products are based on ",(0,a.jsx)(e.strong,{children:"different"})," firmware and marketed differently. Please refer to the product\ncatalogue and/or\ncontact Lobaro for available products with (Lobaro) platform free cellular IoT communication options."]})]})]})}function d(o={}){const{wrapper:e}={...(0,n.R)(),...o.components};return e?(0,a.jsx)(e,{...o,children:(0,a.jsx)(m,{...o})}):m(o)}},8453:(o,e,t)=>{"use strict";t.d(e,{R:()=>i,x:()=>s});var a=t(6540);const n={},r=a.createContext(n);function i(o){const e=a.useContext(r);return a.useMemo((function(){return"function"==typeof o?o(e):{...e,...o}}),[e,o])}function s(o){let e;return e=o.disableParentContext?"function"==typeof o.components?o.components(n):o.components||n:i(o.components),a.createElement(r.Provider,{value:e},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/069518d7.cae413b4.js b/assets/js/069518d7.cae413b4.js new file mode 100644 index 00000000..87de2acc --- /dev/null +++ b/assets/js/069518d7.cae413b4.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[9075],{9208:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png 1600w,"+t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png 1802w",images:[{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",width:1600,height:1323},{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png",width:1802,height:1490}],src:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",toString:function(){return t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png"},placeholder:void 0,width:1600,height:1323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVR4nAFIAbf+ALi4sn+zq6H/sKCU+7esn//At6X/wLSg/7qtmP6onYv/k4Z3+Ma4oiQAzczKnJ6wov9XgGj8g5J4/4OOfP9PY0r/UV9J/mlzY/+QjX3/sZ6MRQDTzMWxj7Ce/wdyQvxdkHr/bYyC/zRWO/8VPin/Rm9t/ZGXkf+xoIhWAMzS2bKmwrr/BWEw/EdyZf9EVzv/c3ZY/2qCiv9denj9kaaw/6SkpHMA0cfDs5W1mP9TiGj8d3Jv/2dpWP9SYk7/JlRC/0RjV/yRnqH/qKyysADPxLezl6qL/3mPjPqim5r9srm1/am+uv0iYU39SE9J+oaJg/+jqrJnAOHg27aGk3r/eIuJ/Jqksv+WrLv/mcXV/yFjT/80RkT8naSi/7/ExGkA3NjShayuos2ChoXBcXF4w2xwesNfc3vCVmthwm50aMCho6DMwMDAThY6x3U9c17CAAAAAElFTkSuQmCC"}},1313:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg 999w",images:[{path:t.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg",width:999,height:720}],src:t.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg",toString:function(){return t.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg"},placeholder:void 0,width:999,height:720},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAHAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAYH/8QAIRAAAgIBAgcAAAAAAAAAAAAAAQIAAwQRMQUGEhUhYaH/xAAUAQEAAAAAAAAAAAAAAAAAAAAB/8QAFREBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhEDEQA/AN2tfiDcxdsroa1VK2PkG0AVoT4YDfq9SqWrICgHIUkDTU17/YiENf/Z"}},9716:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png 300w",images:[{path:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",width:300,height:141}],src:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",toString:function(){return t.p+"assets/images/ideal-img/labelv3.0e38395.300.png"},placeholder:void 0,width:300,height:141},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsUlEQVR4nB3MTQqCQABAYQ8fdIWgCGsXQd2gbYsgNUrzDytnJHWySY0Kghe2fPD4jM+n5Pm8Udc5batompL7PeP7bZnPp0zMAavVEkOpjMtFkCQJUmYIIUlTgdYPhsMRvV6fxWKGcT4HRFFIEBzxPBfHsSiKTm8Yj0eYpollrbsxRmYFm82Ww+GI70fE8Qmta2x7h+t2kIfx0CFVlZDnPmURolRMmu7//X5dqaoTUlj8AJXlsPmMwg3sAAAAAElFTkSuQmCC"}},9643:(e,n,t)=>{"use strict";t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=t(4848),s=t(8453);const o={sidebar_position:4,title:"wM-Bus GW (Concentrator)"},r="Wireless M-Bus Concentrator Gateway",a={id:"products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator",title:"wM-Bus GW (Concentrator)",description:"Wireless M-BUS Gateway V3 (Battery){"use strict";t.d(n,{R:()=>r,x:()=>a});var i=t(6540);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/069518d7.f83b71aa.js b/assets/js/069518d7.f83b71aa.js deleted file mode 100644 index 7bfa6af9..00000000 --- a/assets/js/069518d7.f83b71aa.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[9075],{9208:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png 1600w,"+t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png 1802w",images:[{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",width:1600,height:1323},{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png",width:1802,height:1490}],src:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",toString:function(){return t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png"},placeholder:void 0,width:1600,height:1323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVR4nAFIAbf+ALi4sn+zq6H/sKCU+7esn//At6X/wLSg/7qtmP6onYv/k4Z3+Ma4oiQAzczKnJ6wov9XgGj8g5J4/4OOfP9PY0r/UV9J/mlzY/+QjX3/sZ6MRQDTzMWxj7Ce/wdyQvxdkHr/bYyC/zRWO/8VPin/Rm9t/ZGXkf+xoIhWAMzS2bKmwrr/BWEw/EdyZf9EVzv/c3ZY/2qCiv9denj9kaaw/6SkpHMA0cfDs5W1mP9TiGj8d3Jv/2dpWP9SYk7/JlRC/0RjV/yRnqH/qKyysADPxLezl6qL/3mPjPqim5r9srm1/am+uv0iYU39SE9J+oaJg/+jqrJnAOHg27aGk3r/eIuJ/Jqksv+WrLv/mcXV/yFjT/80RkT8naSi/7/ExGkA3NjShayuos2ChoXBcXF4w2xwesNfc3vCVmthwm50aMCho6DMwMDAThY6x3U9c17CAAAAAElFTkSuQmCC"}},1313:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg 999w",images:[{path:t.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg",width:999,height:720}],src:t.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg",toString:function(){return t.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg"},placeholder:void 0,width:999,height:720},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAHAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAYH/8QAIRAAAgIBAgcAAAAAAAAAAAAAAQIAAwQRMQUGEhUhYaH/xAAUAQEAAAAAAAAAAAAAAAAAAAAB/8QAFREBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhEDEQA/AN2tfiDcxdsroa1VK2PkG0AVoT4YDfq9SqWrICgHIUkDTU17/YiENf/Z"}},9716:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png 300w",images:[{path:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",width:300,height:141}],src:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",toString:function(){return t.p+"assets/images/ideal-img/labelv3.0e38395.300.png"},placeholder:void 0,width:300,height:141},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsUlEQVR4nB3MTQqCQABAYQ8fdIWgCGsXQd2gbYsgNUrzDytnJHWySY0Kghe2fPD4jM+n5Pm8Udc5batompL7PeP7bZnPp0zMAavVEkOpjMtFkCQJUmYIIUlTgdYPhsMRvV6fxWKGcT4HRFFIEBzxPBfHsSiKTm8Yj0eYpollrbsxRmYFm82Ww+GI70fE8Qmta2x7h+t2kIfx0CFVlZDnPmURolRMmu7//X5dqaoTUlj8AJXlsPmMwg3sAAAAAElFTkSuQmCC"}},9643:(e,n,t)=>{"use strict";t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=t(4848),s=t(8453);const o={sidebar_position:4,displayed_sidebar:"productsSidebar",title:"wM-Bus GW (Concentrator)"},r="Wireless M-Bus Concentrator Gateway",a={id:"products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator",title:"wM-Bus GW (Concentrator)",description:"Wireless M-BUS Gateway V3 (Battery){"use strict";t.d(n,{R:()=>r,x:()=>a});var i=t(6540);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09feb8de.cfbe2ed6.js b/assets/js/09feb8de.cfbe2ed6.js new file mode 100644 index 00000000..97d6c620 --- /dev/null +++ b/assets/js/09feb8de.cfbe2ed6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2114],{4855:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>m});var o=n(4848),r=n(8453);const i={sidebar_position:0},s="Firmware Manuals",a={id:"components/firmware/index",title:"Firmware Manuals",description:"",source:"@site/docs/components/firmware/index.md",sourceDirName:"components/firmware",slug:"/components/firmware/",permalink:"/iot/components/firmware/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"allDocSidebar",previous:{title:"Product Components",permalink:"/iot/components/"},next:{title:"Introduction",permalink:"/iot/components/firmware/app-nrf9160-wmbus/introduction"}},c={},m=[];function u(e){const t={h1:"h1",...(0,r.R)(),...e.components};return(0,o.jsx)(t.h1,{id:"firmware-manuals",children:"Firmware Manuals"})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var o=n(6540);const r={},i=o.createContext(r);function s(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09feb8de.dbe12618.js b/assets/js/09feb8de.dbe12618.js deleted file mode 100644 index ab65507f..00000000 --- a/assets/js/09feb8de.dbe12618.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2114],{4855:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>m});var o=t(4848),r=t(8453);const i={sidebar_position:0},s="Firmware Manuals",a={id:"components/firmware/index",title:"Firmware Manuals",description:"",source:"@site/docs/components/firmware/index.md",sourceDirName:"components/firmware",slug:"/components/firmware/",permalink:"/iot/components/firmware/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"componentsSidebar",previous:{title:"Overview",permalink:"/iot/components/"},next:{title:"Introduction",permalink:"/iot/components/firmware/app-nrf9160-wmbus/introduction"}},c={},m=[];function u(e){const n={h1:"h1",...(0,r.R)(),...e.components};return(0,o.jsx)(n.h1,{id:"firmware-manuals",children:"Firmware Manuals"})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var o=t(6540);const r={},i=o.createContext(r);function s(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b02251e.ce46c690.js b/assets/js/0b02251e.ce46c690.js deleted file mode 100644 index e4d3ef67..00000000 --- a/assets/js/0b02251e.ce46c690.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3830],{5570:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"htmlSidebar":[{"type":"html","value":"TEST|TEST","defaultStyle":true}],"allDocSidebar":[{"type":"category","label":"All Docs","items":[{"type":"link","label":"Overview","href":"/iot/","docId":"index","unlisted":false},{"type":"category","label":"Products","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Metering Gateways","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"wM-Bus GW V3 (Battery)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-v3","docId":"products/metering-gateways/wireless-mbus-gateway-v3","unlisted":false},{"type":"link","label":"wM-Bus GW (12V - 24V)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail","docId":"products/metering-gateways/wireless-mbus-gateway-dinrail","unlisted":false},{"type":"link","label":"wM-Bus GW (230V)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-230V","docId":"products/metering-gateways/wireless-mbus-gateway-dinrail-230V","unlisted":false},{"type":"link","label":"wM-Bus GW (Concentrator)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator","docId":"products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator","unlisted":false},{"type":"link","label":"wM-Bus GW (Solar)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-sun-v1","docId":"products/metering-gateways/wireless-mbus-gateway-sun-v1","unlisted":false}]},{"type":"category","label":"Sensor Gateways","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Current Loop","href":"/iot/products/sensor-gateways/current-loop/","docId":"products/sensor-gateways/current-loop/index","unlisted":false},{"type":"link","label":"Liquid Level","href":"/iot/products/sensor-gateways/level/","docId":"products/sensor-gateways/level/index","unlisted":false},{"type":"link","label":"Modbus","href":"/iot/products/sensor-gateways/modbus/","docId":"products/sensor-gateways/modbus/index","unlisted":false},{"type":"link","label":"Temperature","href":"/iot/products/sensor-gateways/temperature/","docId":"products/sensor-gateways/temperature/index","unlisted":false},{"type":"category","label":"Wireless M-BUS (Gen. 3)","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Operation Manual","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg","docId":"products/sensor-gateways/wireless-mbus-g3/manual/cfg","unlisted":false},{"type":"link","label":"Workflow","href":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow","docId":"products/sensor-gateways/wireless-mbus-g3/manual/workflow","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/"},{"type":"category","label":"Hardware Variants","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Gateway V4","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Description","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/"},{"type":"link","label":"Gateway V3","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index","unlisted":false},{"type":"link","label":"Gateway DinRail","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index","unlisted":false},{"type":"link","label":"Gateway Solar","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index","unlisted":false},{"type":"link","label":"Gateway Concentrator","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index","unlisted":false},{"type":"category","label":"Discontinued","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"LoRaWAN Bridge V2","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index","unlisted":false},{"type":"link","label":"Gateway V2","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/"}]}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/"},{"type":"category","label":"Wireless M-BUS (Gen. 2)","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Operation Manual","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg","docId":"products/sensor-gateways/wireless-mbus-g2/manual/cfg","unlisted":false},{"type":"link","label":"Workflow","href":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow","docId":"products/sensor-gateways/wireless-mbus-g2/manual/workflow","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/"},{"type":"category","label":"Hardware Variants","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"LoRaWAN Bridge V2","href":"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/","docId":"products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index","unlisted":false}]}],"href":"/iot/products/sensor-gateways/wireless-mbus-g2/"},{"type":"category","label":"Wired M-BUS (Gen. 1)","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Operation Manual","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg","docId":"products/sensor-gateways/wired-mbus-g1/manual/cfg","unlisted":false},{"type":"link","label":"Workflow","href":"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow","docId":"products/sensor-gateways/wired-mbus-g1/manual/workflow","unlisted":false}],"href":"/iot/products/sensor-gateways/wired-mbus-g1/manual/"},{"type":"category","label":"Hardware Variants","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Hybrid Gateway","href":"/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/","docId":"products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index","unlisted":false}]}],"href":"/iot/products/sensor-gateways/wired-mbus-g1/"}]}],"href":"/iot/products/"},{"type":"category","label":"Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Lobaro USB Config Adapter","href":"/iot/configuration/usb-config-adapter","docId":"configuration/usb-config-adapter","unlisted":false},{"type":"link","label":"Lobaro Config Tool","href":"/iot/configuration/lobaro-config-tool","docId":"configuration/lobaro-config-tool","unlisted":false},{"type":"link","label":"MBUS Reception Filtering","href":"/iot/configuration/meter-reception-filter-config","docId":"configuration/meter-reception-filter-config","unlisted":false},{"type":"link","label":"LoRaWAN Downlink Config","href":"/iot/configuration/lorawan-downlink-config","docId":"configuration/lorawan-downlink-config","unlisted":false},{"type":"link","label":"CRON Configuration","href":"/iot/configuration/cron-configuration","docId":"configuration/cron-configuration","unlisted":false},{"type":"link","label":"LTE Network Configuration","href":"/iot/configuration/lte-network-configuration","docId":"configuration/lte-network-configuration","unlisted":false},{"type":"link","label":"OBIS-Code Configuration","href":"/iot/configuration/obis-code-configuration","docId":"configuration/obis-code-configuration","unlisted":false}],"href":"/iot/configuration/"},{"type":"category","label":"Components","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Firmware Manuals","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"app-nrf9160-wmbus","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/iot/components/firmware/app-nrf9160-wmbus/introduction","docId":"components/firmware/app-nrf9160-wmbus/introduction","unlisted":false},{"type":"link","label":"Configuration Parameter","href":"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter","docId":"components/firmware/app-nrf9160-wmbus/configuration-parameter","unlisted":false},{"type":"link","label":"LoRaWAN Communication","href":"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol","docId":"components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol","unlisted":false},{"type":"link","label":"Cellular IoT Communication","href":"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol","docId":"components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol","unlisted":false},{"type":"link","label":"Changelog & Updates","href":"/iot/components/firmware/app-nrf9160-wmbus/changelog-download","docId":"components/firmware/app-nrf9160-wmbus/changelog-download","unlisted":false}]},{"type":"link","label":"app-hybrid-modbus","href":"/iot/components/firmware/app-hybrid-modbus/","docId":"components/firmware/app-hybrid-modbus/index","unlisted":false}],"href":"/iot/components/firmware/"},{"type":"category","label":"Device Enclosures","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Spelsberg TG PC 1208-6-o","href":"/iot/components/enclosures/spelsberg_TG_PC_1208-6-o","docId":"components/enclosures/spelsberg_TG_PC_1208-6-o","unlisted":false}],"href":"/iot/components/enclosures/"},{"type":"link","label":"Hardware Addon Modules","href":"/iot/components/addon-modules/","docId":"components/addon-modules/index","unlisted":false}],"href":"/iot/components/"},{"type":"category","label":"Lobaro IoT Platform","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Integrations","href":"/iot/platform/integrations/","docId":"platform/integrations/index","unlisted":false},{"type":"category","label":"Administration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Changelog","href":"/iot/platform/administration/changelog","docId":"platform/administration/changelog","unlisted":false},{"type":"link","label":"Datasources","href":"/iot/platform/administration/datasources","docId":"platform/administration/datasources","unlisted":false},{"type":"link","label":"Monitoring","href":"/iot/platform/administration/monitoring","docId":"platform/administration/monitoring","unlisted":false},{"type":"link","label":"Server Certificates","href":"/iot/platform/administration/server-certificates","docId":"platform/administration/server-certificates","unlisted":false},{"type":"link","label":"Server Configuration","href":"/iot/platform/administration/server-configuration","docId":"platform/administration/server-configuration","unlisted":false}],"href":"/iot/platform/administration/"},{"type":"category","label":"Devices","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Downlinks","href":"/iot/platform/devices/downlinks","docId":"platform/devices/downlinks","unlisted":false}],"href":"/iot/platform/devices/"},{"type":"category","label":"Hosting & Licensing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Lobaro Direct+","href":"/iot/platform/license/direct+/","docId":"platform/license/direct+/index","unlisted":false}],"href":"/iot/platform/license/"},{"type":"category","label":"3rd Party Devices","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Dragino","href":"/iot/platform/3rd-party/dragino","docId":"platform/3rd-party/dragino","unlisted":false}]},{"type":"link","label":"FAQ","href":"/iot/platform/faq","docId":"platform/faq","unlisted":false}],"href":"/iot/platform/"},{"type":"category","label":"Background Knowledge","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Wireless M-BUS","href":"/iot/knowledge-base/wireless-mbus","docId":"knowledge-base/wireless-mbus","unlisted":false},{"type":"link","label":"Modbus","href":"/iot/knowledge-base/modbus","docId":"knowledge-base/modbus","unlisted":false}]}],"collapsed":true,"collapsible":true}],"configurationSidebar":[{"type":"category","label":"Configuration","items":[{"type":"link","label":"Overview","href":"/iot/configuration/","docId":"configuration/index","unlisted":false},{"type":"link","label":"Lobaro USB Config Adapter","href":"/iot/configuration/usb-config-adapter","docId":"configuration/usb-config-adapter","unlisted":false},{"type":"link","label":"Lobaro Config Tool","href":"/iot/configuration/lobaro-config-tool","docId":"configuration/lobaro-config-tool","unlisted":false},{"type":"link","label":"MBUS Reception Filtering","href":"/iot/configuration/meter-reception-filter-config","docId":"configuration/meter-reception-filter-config","unlisted":false},{"type":"link","label":"LoRaWAN Downlink Config","href":"/iot/configuration/lorawan-downlink-config","docId":"configuration/lorawan-downlink-config","unlisted":false},{"type":"link","label":"CRON Configuration","href":"/iot/configuration/cron-configuration","docId":"configuration/cron-configuration","unlisted":false},{"type":"link","label":"LTE Network Configuration","href":"/iot/configuration/lte-network-configuration","docId":"configuration/lte-network-configuration","unlisted":false},{"type":"link","label":"OBIS-Code Configuration","href":"/iot/configuration/obis-code-configuration","docId":"configuration/obis-code-configuration","unlisted":false}],"collapsed":true,"collapsible":true}],"productsSidebar":[{"type":"category","label":"Products","items":[{"type":"link","label":"Overview","href":"/iot/products/","docId":"products/index","unlisted":false},{"type":"category","label":"Metering Gateways","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"wM-Bus GW V3 (Battery)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-v3","docId":"products/metering-gateways/wireless-mbus-gateway-v3","unlisted":false},{"type":"link","label":"wM-Bus GW (12V - 24V)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail","docId":"products/metering-gateways/wireless-mbus-gateway-dinrail","unlisted":false},{"type":"link","label":"wM-Bus GW (230V)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-230V","docId":"products/metering-gateways/wireless-mbus-gateway-dinrail-230V","unlisted":false},{"type":"link","label":"wM-Bus GW (Concentrator)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator","docId":"products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator","unlisted":false},{"type":"link","label":"wM-Bus GW (Solar)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-sun-v1","docId":"products/metering-gateways/wireless-mbus-gateway-sun-v1","unlisted":false}]},{"type":"category","label":"Sensor Gateways","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Current Loop","href":"/iot/products/sensor-gateways/current-loop/","docId":"products/sensor-gateways/current-loop/index","unlisted":false},{"type":"link","label":"Liquid Level","href":"/iot/products/sensor-gateways/level/","docId":"products/sensor-gateways/level/index","unlisted":false},{"type":"link","label":"Modbus","href":"/iot/products/sensor-gateways/modbus/","docId":"products/sensor-gateways/modbus/index","unlisted":false},{"type":"link","label":"Temperature","href":"/iot/products/sensor-gateways/temperature/","docId":"products/sensor-gateways/temperature/index","unlisted":false},{"type":"category","label":"Wireless M-BUS (Gen. 3)","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Operation Manual","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg","docId":"products/sensor-gateways/wireless-mbus-g3/manual/cfg","unlisted":false},{"type":"link","label":"Workflow","href":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow","docId":"products/sensor-gateways/wireless-mbus-g3/manual/workflow","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/"},{"type":"category","label":"Hardware Variants","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Gateway V4","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Description","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/"},{"type":"link","label":"Gateway V3","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index","unlisted":false},{"type":"link","label":"Gateway DinRail","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index","unlisted":false},{"type":"link","label":"Gateway Solar","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index","unlisted":false},{"type":"link","label":"Gateway Concentrator","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index","unlisted":false},{"type":"category","label":"Discontinued","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"LoRaWAN Bridge V2","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index","unlisted":false},{"type":"link","label":"Gateway V2","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/"}]}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/"},{"type":"category","label":"Wireless M-BUS (Gen. 2)","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Operation Manual","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg","docId":"products/sensor-gateways/wireless-mbus-g2/manual/cfg","unlisted":false},{"type":"link","label":"Workflow","href":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow","docId":"products/sensor-gateways/wireless-mbus-g2/manual/workflow","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/"},{"type":"category","label":"Hardware Variants","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"LoRaWAN Bridge V2","href":"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/","docId":"products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index","unlisted":false}]}],"href":"/iot/products/sensor-gateways/wireless-mbus-g2/"},{"type":"category","label":"Wired M-BUS (Gen. 1)","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Operation Manual","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg","docId":"products/sensor-gateways/wired-mbus-g1/manual/cfg","unlisted":false},{"type":"link","label":"Workflow","href":"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow","docId":"products/sensor-gateways/wired-mbus-g1/manual/workflow","unlisted":false}],"href":"/iot/products/sensor-gateways/wired-mbus-g1/manual/"},{"type":"category","label":"Hardware Variants","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Hybrid Gateway","href":"/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/","docId":"products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index","unlisted":false}]}],"href":"/iot/products/sensor-gateways/wired-mbus-g1/"}]}],"collapsed":true,"collapsible":true}],"componentsSidebar":[{"type":"category","label":"Components","items":[{"type":"link","label":"Overview","href":"/iot/components/","docId":"components/index","unlisted":false},{"type":"category","label":"Firmware Manuals","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"app-nrf9160-wmbus","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/iot/components/firmware/app-nrf9160-wmbus/introduction","docId":"components/firmware/app-nrf9160-wmbus/introduction","unlisted":false},{"type":"link","label":"Configuration Parameter","href":"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter","docId":"components/firmware/app-nrf9160-wmbus/configuration-parameter","unlisted":false},{"type":"link","label":"LoRaWAN Communication","href":"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol","docId":"components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol","unlisted":false},{"type":"link","label":"Cellular IoT Communication","href":"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol","docId":"components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol","unlisted":false},{"type":"link","label":"Changelog & Updates","href":"/iot/components/firmware/app-nrf9160-wmbus/changelog-download","docId":"components/firmware/app-nrf9160-wmbus/changelog-download","unlisted":false}]},{"type":"link","label":"app-hybrid-modbus","href":"/iot/components/firmware/app-hybrid-modbus/","docId":"components/firmware/app-hybrid-modbus/index","unlisted":false}],"href":"/iot/components/firmware/"},{"type":"category","label":"Device Enclosures","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Spelsberg TG PC 1208-6-o","href":"/iot/components/enclosures/spelsberg_TG_PC_1208-6-o","docId":"components/enclosures/spelsberg_TG_PC_1208-6-o","unlisted":false}],"href":"/iot/components/enclosures/"},{"type":"link","label":"Hardware Addon Modules","href":"/iot/components/addon-modules/","docId":"components/addon-modules/index","unlisted":false}],"collapsed":true,"collapsible":true}],"cloudSidebar":[{"type":"category","label":"Lobaro IoT Platform","items":[{"type":"link","label":"Overview","href":"/iot/platform/","docId":"platform/index","unlisted":false},{"type":"link","label":"Integrations","href":"/iot/platform/integrations/","docId":"platform/integrations/index","unlisted":false},{"type":"category","label":"Administration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Changelog","href":"/iot/platform/administration/changelog","docId":"platform/administration/changelog","unlisted":false},{"type":"link","label":"Datasources","href":"/iot/platform/administration/datasources","docId":"platform/administration/datasources","unlisted":false},{"type":"link","label":"Monitoring","href":"/iot/platform/administration/monitoring","docId":"platform/administration/monitoring","unlisted":false},{"type":"link","label":"Server Certificates","href":"/iot/platform/administration/server-certificates","docId":"platform/administration/server-certificates","unlisted":false},{"type":"link","label":"Server Configuration","href":"/iot/platform/administration/server-configuration","docId":"platform/administration/server-configuration","unlisted":false}],"href":"/iot/platform/administration/"},{"type":"category","label":"Devices","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Downlinks","href":"/iot/platform/devices/downlinks","docId":"platform/devices/downlinks","unlisted":false}],"href":"/iot/platform/devices/"},{"type":"category","label":"Hosting & Licensing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Lobaro Direct+","href":"/iot/platform/license/direct+/","docId":"platform/license/direct+/index","unlisted":false}],"href":"/iot/platform/license/"},{"type":"category","label":"3rd Party Devices","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Dragino","href":"/iot/platform/3rd-party/dragino","docId":"platform/3rd-party/dragino","unlisted":false}]},{"type":"link","label":"FAQ","href":"/iot/platform/faq","docId":"platform/faq","unlisted":false}],"collapsed":true,"collapsible":true}],"knowledgeBaseSidebar":[{"type":"category","label":"Knowledge Base","items":[{"type":"link","label":"Wireless M-BUS","href":"/iot/knowledge-base/wireless-mbus","docId":"knowledge-base/wireless-mbus","unlisted":false},{"type":"link","label":"Modbus","href":"/iot/knowledge-base/modbus","docId":"knowledge-base/modbus","unlisted":false}],"collapsed":true,"collapsible":true}]},"docs":{"components/addon-modules/index":{"id":"components/addon-modules/index","title":"Addon Modules Overview","description":"","sidebar":"componentsSidebar"},"components/enclosures/index":{"id":"components/enclosures/index","title":"Device Enclosures","description":"","sidebar":"componentsSidebar"},"components/enclosures/spelsberg_TG_PC_1208-6-o":{"id":"components/enclosures/spelsberg_TG_PC_1208-6-o","title":"Spelsberg TG PC 1208-6-o","description":"\'Spelsberg{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"htmlSidebar":[{"type":"html","value":"TEST|TEST","defaultStyle":true}],"allDocSidebar":[{"type":"category","label":"Lobaro Docs","items":[{"type":"link","label":"Overview","href":"/iot/","docId":"index","unlisted":false},{"type":"category","label":"Products","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Metering Gateways","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"wM-Bus GW V3 (Battery)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-v3","docId":"products/metering-gateways/wireless-mbus-gateway-v3","unlisted":false},{"type":"link","label":"wM-Bus GW (12V - 24V)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail","docId":"products/metering-gateways/wireless-mbus-gateway-dinrail","unlisted":false},{"type":"link","label":"wM-Bus GW (230V)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-230V","docId":"products/metering-gateways/wireless-mbus-gateway-dinrail-230V","unlisted":false},{"type":"link","label":"wM-Bus GW (Concentrator)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator","docId":"products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator","unlisted":false},{"type":"link","label":"wM-Bus GW (Solar)","href":"/iot/products/metering-gateways/wireless-mbus-gateway-sun-v1","docId":"products/metering-gateways/wireless-mbus-gateway-sun-v1","unlisted":false}]},{"type":"category","label":"Sensor Gateways","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Current Loop","href":"/iot/products/sensor-gateways/current-loop/","docId":"products/sensor-gateways/current-loop/index","unlisted":false},{"type":"link","label":"Liquid Level","href":"/iot/products/sensor-gateways/level/","docId":"products/sensor-gateways/level/index","unlisted":false},{"type":"link","label":"Modbus","href":"/iot/products/sensor-gateways/modbus/","docId":"products/sensor-gateways/modbus/index","unlisted":false},{"type":"link","label":"Temperature","href":"/iot/products/sensor-gateways/temperature/","docId":"products/sensor-gateways/temperature/index","unlisted":false},{"type":"category","label":"Wireless M-BUS (Gen. 3)","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Operation Manual","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg","docId":"products/sensor-gateways/wireless-mbus-g3/manual/cfg","unlisted":false},{"type":"link","label":"Workflow","href":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow","docId":"products/sensor-gateways/wireless-mbus-g3/manual/workflow","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/"},{"type":"category","label":"Hardware Variants","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Gateway V4","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Description","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/"},{"type":"link","label":"Gateway V3","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index","unlisted":false},{"type":"link","label":"Gateway DinRail","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index","unlisted":false},{"type":"link","label":"Gateway Solar","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index","unlisted":false},{"type":"link","label":"Gateway Concentrator","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index","unlisted":false},{"type":"category","label":"Discontinued","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"LoRaWAN Bridge V2","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index","unlisted":false},{"type":"link","label":"Gateway V2","href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/","docId":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/"}]}],"href":"/iot/products/sensor-gateways/wireless-mbus-g3/"},{"type":"category","label":"Wireless M-BUS (Gen. 2)","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Operation Manual","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg","docId":"products/sensor-gateways/wireless-mbus-g2/manual/cfg","unlisted":false},{"type":"link","label":"Workflow","href":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow","docId":"products/sensor-gateways/wireless-mbus-g2/manual/workflow","unlisted":false}],"href":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/"},{"type":"category","label":"Hardware Variants","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"LoRaWAN Bridge V2","href":"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/","docId":"products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index","unlisted":false}]}],"href":"/iot/products/sensor-gateways/wireless-mbus-g2/"},{"type":"category","label":"Wired M-BUS (Gen. 1)","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Operation Manual","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg","docId":"products/sensor-gateways/wired-mbus-g1/manual/cfg","unlisted":false},{"type":"link","label":"Workflow","href":"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow","docId":"products/sensor-gateways/wired-mbus-g1/manual/workflow","unlisted":false}],"href":"/iot/products/sensor-gateways/wired-mbus-g1/manual/"},{"type":"category","label":"Hardware Variants","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Hybrid Gateway","href":"/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/","docId":"products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index","unlisted":false}]}],"href":"/iot/products/sensor-gateways/wired-mbus-g1/"}]}],"href":"/iot/products/"},{"type":"category","label":"Components","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Firmware","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"app-nrf9160-wmbus","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/iot/components/firmware/app-nrf9160-wmbus/introduction","docId":"components/firmware/app-nrf9160-wmbus/introduction","unlisted":false},{"type":"link","label":"Configuration Parameter","href":"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter","docId":"components/firmware/app-nrf9160-wmbus/configuration-parameter","unlisted":false},{"type":"link","label":"LoRaWAN Communication","href":"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol","docId":"components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol","unlisted":false},{"type":"link","label":"Cellular IoT Communication","href":"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol","docId":"components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol","unlisted":false},{"type":"link","label":"Changelog & Updates","href":"/iot/components/firmware/app-nrf9160-wmbus/changelog-download","docId":"components/firmware/app-nrf9160-wmbus/changelog-download","unlisted":false}]},{"type":"link","label":"app-hybrid-modbus","href":"/iot/components/firmware/app-hybrid-modbus/","docId":"components/firmware/app-hybrid-modbus/index","unlisted":false}],"href":"/iot/components/firmware/"},{"type":"category","label":"Device Enclosures","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Spelsberg TG PC 1208-6-o","href":"/iot/components/enclosures/spelsberg_TG_PC_1208-6-o","docId":"components/enclosures/spelsberg_TG_PC_1208-6-o","unlisted":false}],"href":"/iot/components/enclosures/"},{"type":"link","label":"Hardware Addon Modules","href":"/iot/components/addon-modules/","docId":"components/addon-modules/index","unlisted":false}],"href":"/iot/components/"},{"type":"category","label":"Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Lobaro USB Config Adapter","href":"/iot/configuration/usb-config-adapter","docId":"configuration/usb-config-adapter","unlisted":false},{"type":"link","label":"Lobaro Config Tool","href":"/iot/configuration/lobaro-config-tool","docId":"configuration/lobaro-config-tool","unlisted":false},{"type":"link","label":"MBUS Reception Filtering","href":"/iot/configuration/meter-reception-filter-config","docId":"configuration/meter-reception-filter-config","unlisted":false},{"type":"link","label":"LoRaWAN Downlink Config","href":"/iot/configuration/lorawan-downlink-config","docId":"configuration/lorawan-downlink-config","unlisted":false},{"type":"link","label":"CRON Configuration","href":"/iot/configuration/cron-configuration","docId":"configuration/cron-configuration","unlisted":false},{"type":"link","label":"LTE Network Configuration","href":"/iot/configuration/lte-network-configuration","docId":"configuration/lte-network-configuration","unlisted":false},{"type":"link","label":"OBIS-Code Configuration","href":"/iot/configuration/obis-code-configuration","docId":"configuration/obis-code-configuration","unlisted":false}],"href":"/iot/configuration/"},{"type":"category","label":"Lobaro IoT Platform","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Integrations","href":"/iot/platform/integrations/","docId":"platform/integrations/index","unlisted":false},{"type":"category","label":"Administration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Changelog","href":"/iot/platform/administration/changelog","docId":"platform/administration/changelog","unlisted":false},{"type":"link","label":"Datasources","href":"/iot/platform/administration/datasources","docId":"platform/administration/datasources","unlisted":false},{"type":"link","label":"Monitoring","href":"/iot/platform/administration/monitoring","docId":"platform/administration/monitoring","unlisted":false},{"type":"link","label":"Server Certificates","href":"/iot/platform/administration/server-certificates","docId":"platform/administration/server-certificates","unlisted":false},{"type":"link","label":"Server Configuration","href":"/iot/platform/administration/server-configuration","docId":"platform/administration/server-configuration","unlisted":false}],"href":"/iot/platform/administration/"},{"type":"category","label":"Devices","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Downlinks","href":"/iot/platform/devices/downlinks","docId":"platform/devices/downlinks","unlisted":false}],"href":"/iot/platform/devices/"},{"type":"category","label":"Hosting & Licensing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Lobaro Direct+","href":"/iot/platform/license/direct+/","docId":"platform/license/direct+/index","unlisted":false}],"href":"/iot/platform/license/"},{"type":"category","label":"3rd Party Devices","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Dragino","href":"/iot/platform/3rd-party/dragino","docId":"platform/3rd-party/dragino","unlisted":false}]},{"type":"link","label":"FAQ","href":"/iot/platform/faq","docId":"platform/faq","unlisted":false}],"href":"/iot/platform/"},{"type":"category","label":"Knowledge Base","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Wireless M-BUS","href":"/iot/knowledge-base/wireless-mbus","docId":"knowledge-base/wireless-mbus","unlisted":false},{"type":"link","label":"Modbus","href":"/iot/knowledge-base/modbus","docId":"knowledge-base/modbus","unlisted":false}],"href":"/iot/knowledge-base/"}],"collapsed":true,"collapsible":true}]},"docs":{"components/addon-modules/index":{"id":"components/addon-modules/index","title":"Addon Modules Overview","description":"","sidebar":"allDocSidebar"},"components/enclosures/index":{"id":"components/enclosures/index","title":"Device Enclosures","description":"","sidebar":"allDocSidebar"},"components/enclosures/spelsberg_TG_PC_1208-6-o":{"id":"components/enclosures/spelsberg_TG_PC_1208-6-o","title":"Spelsberg TG PC 1208-6-o","description":"\'Spelsberg{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=t(4848),o=t(8453);const r={sidebar_position:1},a="Configuration",i={id:"products/sensor-gateways/wireless-mbus-g2/manual/cfg",title:"Configuration",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g2/manual/cfg.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g2/manual",slug:"/products/sensor-gateways/wireless-mbus-g2/manual/cfg",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g2/manual/cfg.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/"},next:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow"}},u={},c=[];function l(e){const s={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(6540);const o={},r=n.createContext(o);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0dbe350f.47aa5ee7.js b/assets/js/0dbe350f.47aa5ee7.js new file mode 100644 index 00000000..3b401044 --- /dev/null +++ b/assets/js/0dbe350f.47aa5ee7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8726],{5320:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=t(4848),o=t(8453);const r={sidebar_position:1},a="Configuration",i={id:"products/sensor-gateways/wireless-mbus-g2/manual/cfg",title:"Configuration",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g2/manual/cfg.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g2/manual",slug:"/products/sensor-gateways/wireless-mbus-g2/manual/cfg",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g2/manual/cfg.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/"},next:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow"}},u={},c=[];function l(e){const s={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(6540);const o={},r=n.createContext(o);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1034e1fe.6608d77a.js b/assets/js/1034e1fe.6608d77a.js new file mode 100644 index 00000000..4ebc612f --- /dev/null +++ b/assets/js/1034e1fe.6608d77a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[136],{8882:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var i=t(4848),s=t(8453);const r={sidebar_position:4,title:"CRON Configuration"},d="CRON Configuration",l={id:"configuration/cron-configuration",title:"CRON Configuration",description:"We use CRON expressions configure the behavioral timing of our devices. This CRON configuration can be adjusted during",source:"@site/docs/configuration/cron-configuration.md",sourceDirName:"configuration",slug:"/configuration/cron-configuration",permalink:"/iot/configuration/cron-configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/cron-configuration.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,title:"CRON Configuration"},sidebar:"allDocSidebar",previous:{title:"LoRaWAN Downlink Config",permalink:"/iot/configuration/lorawan-downlink-config"},next:{title:"LTE Network Configuration",permalink:"/iot/configuration/lte-network-configuration"}},o={},a=[{value:"Meaning of the six field parameter",id:"meaning-of-the-six-field-parameter",level:2},{value:"Star (Asterisk) *",id:"star-asterisk-",level:3},{value:"Question mark (?)",id:"question-mark-",level:3},{value:"Dash, minus (-)",id:"dash-minus--",level:3},{value:"Comma (,)",id:"comma-",level:3},{value:"Slash (/)",id:"slash-",level:3},{value:"Weekday (W)",id:"weekday-w",level:3},{value:"Last (L)",id:"last-l",level:3},{value:"Hash (H)",id:"hash-h",level:3},{value:"Pitfalls with using H",id:"pitfalls-with-using-h",level:4},{value:"Examples",id:"examples",level:2},{value:"Standard CRON Syntax",id:"standard-cron-syntax",level:3},{value:"Extended CRON Syntax",id:"extended-cron-syntax",level:3},{value:"Further Reading",id:"further-reading",level:2},{value:"Online CRON Generators",id:"online-cron-generators",level:3}];function h(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"cron-configuration",children:"CRON Configuration"}),"\n",(0,i.jsxs)(n.p,{children:["We use CRON expressions configure the behavioral timing of our devices. This CRON configuration can be adjusted during\ndevice configuration using the ",(0,i.jsx)(n.a,{href:"/iot/configuration/lobaro-config-tool",children:"Lobaro Maintenance Tool"}),"\nor remotely over the air."]}),"\n",(0,i.jsxs)(n.p,{children:["The CRON expressions consists of 6 fields, separated by space: e.g. ",(0,i.jsx)(n.code,{children:"0 0/15 * * * *"})," , which describes time points every\n15 minutes starting from minute 0."]}),"\n",(0,i.jsxs)(n.p,{children:["CRON expression allow you to define specific ",(0,i.jsx)(n.strong,{children:"POINTS in time"})," they are NOT helpful to define time durations. They can\nbe seen\nhas the start time to trigger an action, for example initiating the sensor measurement or wireless sendout. The duration\nof an action is defined by a separate configuration parameter if needed."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Timezone and Daylight Saving",type:"warning",children:[(0,i.jsx)(n.p,{children:"All times are referenced to UTC+0 timezone! Keep this in mind when setting CRON configurations on Lobaro devices."}),(0,i.jsxs)(n.p,{children:["This implementation detail implies that daylight saving time switches will change the behavior of the device by one\nhour.",(0,i.jsx)(n.br,{}),"\n","Example for Central Europe:"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Winter: UTC+1 (Central European Time)"}),"\n",(0,i.jsx)(n.li,{children:"Summer: UTC+2 (Central European Summer Time)"}),"\n"]})]}),"\n",(0,i.jsx)(n.h2,{id:"meaning-of-the-six-field-parameter",children:"Meaning of the six field parameter"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"0 0/15 * * * *"})," - time points every 15 minutes starting from minute 0."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Second"}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Minute"}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Hour"}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Day of Month"}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Month of year"}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Day of Week"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Range"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(0-59)"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(0-59)"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(0-23)"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(1-31)"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(1-12)"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(1-7)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Alternative"}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"JAN-DEC"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"MON-SUN"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:", - * /"})," special chars"]}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"?"})," special char"]}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"H L"})," special chars"]}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"W"})," special char"]}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Example"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)(n.strong,{children:"0"})}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)(n.strong,{children:"0/15"})}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)("b",{children:"*"})}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)("b",{children:"*"})}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)("b",{children:"*"})}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)("b",{children:"*"})})]})]})]}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"H L W"})," are only supported on recent firmware releases, check product description for details."]})}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Day of Month"})," and ",(0,i.jsx)(n.strong,{children:"Day of Week"})," ",(0,i.jsx)(n.em,{children:"should"})," be treated ",(0,i.jsx)(n.strong,{children:"mutually exclusive"})," and one of them should be set to ",(0,i.jsx)(n.code,{children:"?"}),".",(0,i.jsx)(n.br,{}),"\n","As an example the following CRON may not have the intended behaviour if not following this advice:"]}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"0 0 1 1 * MON"})," Would only trigger on 1st of every month ",(0,i.jsx)(n.strong,{children:"that is"})," a Monday."]})]}),"\n",(0,i.jsx)(n.h3,{id:"star-asterisk-",children:"Star (Asterisk) *"}),"\n",(0,i.jsx)(n.p,{children:'Used to select all values within a field. For example, "*" in the minute field means "every minute".'}),"\n",(0,i.jsx)(n.h3,{id:"question-mark-",children:"Question mark (?)"}),"\n",(0,i.jsx)(n.p,{children:"Useful when you need to specify something in one of the two fields in which the character is allowed, but not the other.\nFor example, if I want my trigger to fire on a particular day of the month (say, the 10th), but don\u2019t care what day of\nthe week that happens to be, I would put \u201c10\u201d in the day-of-month field, and \u201c?\u201d in the day-of-week field. See the\nexamples below for clarification."}),"\n",(0,i.jsx)(n.h3,{id:"dash-minus--",children:"Dash, minus (-)"}),"\n",(0,i.jsx)(n.p,{children:"Used to specify ranges. For example, \u201c10-12\u201d in the hour field means \u201cthe hours 10, 11 and 12\u201d."}),"\n",(0,i.jsx)(n.h3,{id:"comma-",children:"Comma (,)"}),"\n",(0,i.jsx)(n.p,{children:'Used to specify multiple explicit values. For example, \u201cMON,WED,FRI\u201d in the day-of-week field means \u201cthe days Monday,\nWednesday, and Friday\u201d, "1,15" in the day-of-month field means "on the first and 15th of the month".'}),"\n",(0,i.jsx)(n.h3,{id:"slash-",children:"Slash (/)"}),"\n",(0,i.jsx)(n.p,{children:'Used to specify increments. For example, "0/15" in the seconds field means "0 and then every 15", that is "the seconds\n0, 15, 30, and 45". And "5/15" in the seconds field means "the seconds 5, 20, 35, and 50". You can also use "/" for\nother fields. "1/3" in the day-of-month field means "fire every 3 days starting on the first day of the month".'}),"\n",(0,i.jsx)(n.h3,{id:"weekday-w",children:"Weekday (W)"}),"\n",(0,i.jsxs)(n.p,{children:["Only valid in the day-of-month field. Used as a modifier added after a given day, e.g. ",(0,i.jsx)(n.code,{children:"15W"}),". This will execute on the\nnearest weekday (Monday to Friday) around that day. So ",(0,i.jsx)(n.code,{children:"0 0 12 15W * *"})," will execute on 12h UTC of the 15th of a month,\nif that day is a Monday, Tuesday, Wednesday, Thursday, of Friday. If the 15th is a Saturday, it will execute on 12h UTC\non Friday the 14th. If the 15th is a Sunday, it will execute on 12h UTC on Monday the 16th. It will however never jump\ninto another month. If you use ",(0,i.jsx)(n.code,{children:"1W"}),", and the first day of the month is a Saturday, it will execute on Monday the 3rd."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:['Can be used in combination with lists (comma ","), must be used for each individual value of the list you want to use\nit on, e.g. ',(0,i.jsx)(n.code,{children:"1W,15W"}),"."]}),"\n",(0,i.jsx)(n.li,{children:'Cannot be used with ranges (dash, "-") or increments (slash "/").'}),"\n",(0,i.jsxs)(n.li,{children:['Can be used in combination is hash ("H"), in the form ',(0,i.jsx)(n.code,{children:"HW"})," or e.g. ",(0,i.jsx)(n.code,{children:"H(6-9)W"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:['Can be used in combination with "L", but only as ',(0,i.jsx)(n.code,{children:"LW"}),", to execute on the last weekday of a month."]}),"\n"]})}),"\n",(0,i.jsx)(n.h3,{id:"last-l",children:"Last (L)"}),"\n",(0,i.jsx)(n.p,{children:"Has a different meaning, depending on where you use it."}),"\n",(0,i.jsxs)(n.p,{children:["A simple ",(0,i.jsx)(n.code,{children:"L"}),' means "the last of something". This is useful for the day-of-month field, as the last day of a month is\ndependent on the current month and year. ',(0,i.jsx)(n.code,{children:"0 0 12 L ?"})," will execute on the 31st of January, on the 28th or 29th (for leap\nyears) of February, on the 31st of March, on the 30th of April, and so on. You can also specify offsets from the last\nvalue, like this: ",(0,i.jsx)(n.code,{children:"0 0 12 L-3 * ?"}),". This executes on the 28th of January, on the 25th of 26th of February, and so on."]}),"\n",(0,i.jsxs)(n.p,{children:["In the day-of-week field ",(0,i.jsx)(n.code,{children:"L"})," simply refers to Sunday. But in combination with a number, it can be used to execute on the\nlast specific weekday of a month, like this: ",(0,i.jsx)(n.code,{children:"0 0 12 ? * 1L"})," will execute at 12h on the last Monday of every month."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Can be used in combination with ",(0,i.jsx)(n.code,{children:"W"}),", as ",(0,i.jsx)(n.code,{children:"LW"}),", to execute on the last weekday of a month."]}),"\n"]})}),"\n",(0,i.jsx)(n.h3,{id:"hash-h",children:"Hash (H)"}),"\n",(0,i.jsxs)(n.p,{children:["The character ",(0,i.jsx)(n.code,{children:"H"})," can be used in place of a number in any field of the cron. The ",(0,i.jsx)(n.code,{children:"H"})," wil be replaced with a consistent\npseudo random number, that fits into that field. On any given device this number will always be the same for a field,\nbut it\nwill differ for different devices. This can be used as a simple mechanism for load balancing, or to avoid collisions, if\nyou use a lot of devices."]}),"\n",(0,i.jsx)(n.p,{children:"Numbers will be 0-59 for second and minute fields, 0-23 for the hour field, 0-28 for the day-of-month field (it will\nnever activate on 29th, 30th, or 31st), 1-12 for the month field, and 1-7 for the day-of-week field."}),"\n",(0,i.jsxs)(n.p,{children:["When you, for example, set many devices to the cron ",(0,i.jsx)(n.code,{children:"0 0 4 * * *"}),", they will all activate at 4 AM UTC in the same\nsecond. For LoRaWAN devices, this will lead to a lot of packet collisions and therefore data loss, if the devices are in\nthe same area. For NB-IoT/LTE-M devices, it will lead to a concentrated workload on the server handling the requests and\nthe system evaluating the data. This can lead to bad system performance during that spike, while the system is idle most\nof the day."]}),"\n",(0,i.jsxs)(n.p,{children:["If instead of ",(0,i.jsx)(n.code,{children:"0 0 4 * * *"})," you set the devices to ",(0,i.jsx)(n.code,{children:"H H 4 * * *"}),", the two H characters will be replaced with a\nper-device-consistent random number in the range of 0-59, for example ",(0,i.jsx)(n.code,{children:"31 47 4 * * *"})," for one and ",(0,i.jsx)(n.code,{children:"17 0 4 * * *"})," for\nanother device. With this, the devices will all activate in the hour between 4 AM and 5 AM UTC and distribute the\nworkload."]}),"\n",(0,i.jsxs)(n.p,{children:["You can use ",(0,i.jsx)(n.code,{children:"H"})," to pick a pseudo random number from a specific range by specifying the range in parenthesis like this:\n",(0,i.jsx)(n.code,{children:"H(4-8)"})," will be replaced with any of the numbers 4, 5, 6, 7, 8. The range must only use numbers that are valid for the\nfield ",(0,i.jsx)(n.code,{children:"H"})," is used in."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'Can be used inside lists (comma ","), but the generated value could collide with other entries in list (see below).'}),"\n",(0,i.jsx)(n.li,{children:'Cannot be used with ranges (dash, "-").'}),"\n",(0,i.jsx)(n.li,{children:'Can be used with increments (slash, "/"), but only before the slash, as in "H(0-2)/3", not after it.'}),"\n"]})}),"\n",(0,i.jsx)(n.h4,{id:"pitfalls-with-using-h",children:"Pitfalls with using H"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Working with ",(0,i.jsx)(n.code,{children:"H"})," can be confusing and lead to unexpected results. It can be used in many places, but not all of them are\nuseful."]})}),"\n",(0,i.jsxs)(n.p,{children:["Writing ",(0,i.jsx)(n.code,{children:"0 H/10 * * * *"})," will on most devices create a cron that does not activate every 10 minutes. It\ncould evaluate to the expression ",(0,i.jsx)(n.code,{children:"0 47/10 * * * *"}),", which will only activate twice each hour, in minutes 47 and 57, but\nnot during minutes 0-46 at all. To have devices activate every 10 minutes at distributed times,\nuse ",(0,i.jsx)(n.code,{children:"0 H(0-9)/10 * * * *"})," or better yet: ",(0,i.jsx)(n.code,{children:"H H(0-9)/10 * * * *"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Using ",(0,i.jsx)(n.code,{children:"H"})," in a list works, but it might lead to fewer activations as intended. Putting it in a list twice will not\nproduce multiple activations, because both ",(0,i.jsx)(n.code,{children:"H"})," will evaluate to the same number: ",(0,i.jsx)(n.code,{children:"0 0 H,H * * *"})," could turn into ",(0,i.jsx)(n.code,{children:"0 0 3,3 * * *"}),", which is the same as ",(0,i.jsx)(n.code,{children:"0 0 3 * * *"}),". Using ",(0,i.jsx)(n.code,{children:"0 0 H(0-4),H(8-12) * * *"})," would work to produce two activations\nper day."]}),"\n",(0,i.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,i.jsx)(n.h3,{id:"standard-cron-syntax",children:"Standard CRON Syntax"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.th,{children:["Cron definition",(0,i.jsx)("div",{style:{width:"185px"}})]}),(0,i.jsx)(n.th,{children:"Description"}),(0,i.jsxs)(n.th,{children:["Trigger time points (hh:mm",":ss",")"]})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 5 * * * * "})}),(0,i.jsx)(n.td,{children:"Hourly at minute 5, second 0"}),(0,i.jsx)(n.td,{children:"00:05:00, 01:05:00, 02:05:00..."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 1/10 * * * * "})}),(0,i.jsx)(n.td,{children:"Every 10 minutes starting from minute 1, second 0"}),(0,i.jsx)(n.td,{children:"00:01:00, 00:11:00, 00:21:00, [...], 01:01:00, [...]"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 6 * * * "})}),(0,i.jsx)(n.td,{children:"Daily on hour 6, minute 0, second 0"}),(0,i.jsx)(n.td,{children:"06:00:00"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 13 1,15 * * "})}),(0,i.jsx)(n.td,{children:"Hour 13, minute 0, second 0 on day 1 and 15"}),(0,i.jsx)(n.td,{children:"13:00:00 at 1st and 15th of month"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 15 9 1-5 * * "})}),(0,i.jsx)(n.td,{children:"Hour 9, minute 15, second 0 on day 1 to 5"}),(0,i.jsx)(n.td,{children:"09:15:00 at 1st to 5th of month"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 6 * * 1 "})}),(0,i.jsx)(n.td,{children:"Weekly on Monday at 06:00:00"}),(0,i.jsx)(n.td,{children:"Monday, 06:00:00"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"extended-cron-syntax",children:"Extended CRON Syntax"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.th,{children:["Cron definition ",(0,i.jsx)("div",{style:{width:"185px"}})]}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 11 1W,15W * * "})}),(0,i.jsx)(n.td,{children:"11am on the days closest to the 1st and the 15th day each month that are not Saturdays or Sundays."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 15 1,L * * "})}),(0,i.jsx)(n.td,{children:"3pm on the first and last day of each month."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 1 ? * 2L "})}),(0,i.jsx)(n.td,{children:"1am on the last Tuesday of each month."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"H H H(0-2) * * * "})}),(0,i.jsx)(n.td,{children:"Every day at a fixed pseudo random time between 00:00:00 and 02:59:59.Same time each day for a given device, but different time for different devices."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:" H H(0-9)/10 * * * *"})}),(0,i.jsx)(n.td,{children:"Every 10 minutes, but at a fixed time, randomly but consistently picked for each device."})]})]})]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["The Extended CRON Syntax will only work on recent firmware versions, e.g. the ",(0,i.jsx)(n.code,{children:"app-nrf9160-wmbus"})," firmware versions 0.15.4 and\nnewer.\nCheck the specific product manual to see if the extended syntax is implemented in the firmware."]})}),"\n",(0,i.jsx)(n.h2,{id:"further-reading",children:"Further Reading"}),"\n",(0,i.jsxs)(n.p,{children:["All our CRON expressions are in the same format as the ",(0,i.jsx)(n.strong,{children:"Java Quarz scheduler"}),", without the optional ",(0,i.jsx)(n.code,{children:"year"})," field and a\ndifferent way of numbering weekdays. Also the extended CRON field have been added by Lobaro. A good documentation\nincluding\nexamples can be found here:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html",children:"http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html"})}),"\n",(0,i.jsx)(n.h3,{id:"online-cron-generators",children:"Online CRON Generators"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.freeformatter.com/cron-expression-generator-quartz.html",children:"https://www.freeformatter.com/cron-expression-generator-quartz.html"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://crontab-generator.org/",children:"https://crontab-generator.org/"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'"command" need to be set to some random string'}),"\n",(0,i.jsx)(n.li,{children:'The generated CRON has no "seconds" field'}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://crontab.guru/",children:"https://crontab.guru/"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'The generated CRON has no "seconds" field'}),"\n"]}),"\n"]}),"\n"]})]})}function c(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>d,x:()=>l});var i=t(6540);const s={},r=i.createContext(s);function d(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1034e1fe.8a529e99.js b/assets/js/1034e1fe.8a529e99.js deleted file mode 100644 index 8410b564..00000000 --- a/assets/js/1034e1fe.8a529e99.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[136],{8882:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var i=t(4848),s=t(8453);const r={sidebar_position:4,displayed_sidebar:"configurationSidebar",title:"CRON Configuration"},d="CRON Configuration",l={id:"configuration/cron-configuration",title:"CRON Configuration",description:"We use CRON expressions configure the behavioral timing of our devices. This CRON configuration can be adjusted during",source:"@site/docs/configuration/cron-configuration.md",sourceDirName:"configuration",slug:"/configuration/cron-configuration",permalink:"/iot/configuration/cron-configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/cron-configuration.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,displayed_sidebar:"configurationSidebar",title:"CRON Configuration"},sidebar:"configurationSidebar",previous:{title:"LoRaWAN Downlink Config",permalink:"/iot/configuration/lorawan-downlink-config"},next:{title:"LTE Network Configuration",permalink:"/iot/configuration/lte-network-configuration"}},o={},a=[{value:"Meaning of the six field parameter",id:"meaning-of-the-six-field-parameter",level:2},{value:"Star (Asterisk) *",id:"star-asterisk-",level:3},{value:"Question mark (?)",id:"question-mark-",level:3},{value:"Dash, minus (-)",id:"dash-minus--",level:3},{value:"Comma (,)",id:"comma-",level:3},{value:"Slash (/)",id:"slash-",level:3},{value:"Weekday (W)",id:"weekday-w",level:3},{value:"Last (L)",id:"last-l",level:3},{value:"Hash (H)",id:"hash-h",level:3},{value:"Pitfalls with using H",id:"pitfalls-with-using-h",level:4},{value:"Examples",id:"examples",level:2},{value:"Standard CRON Syntax",id:"standard-cron-syntax",level:3},{value:"Extended CRON Syntax",id:"extended-cron-syntax",level:3},{value:"Further Reading",id:"further-reading",level:2},{value:"Online CRON Generators",id:"online-cron-generators",level:3}];function h(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"cron-configuration",children:"CRON Configuration"}),"\n",(0,i.jsxs)(n.p,{children:["We use CRON expressions configure the behavioral timing of our devices. This CRON configuration can be adjusted during\ndevice configuration using the ",(0,i.jsx)(n.a,{href:"/iot/configuration/lobaro-config-tool",children:"Lobaro Maintenance Tool"}),"\nor remotely over the air."]}),"\n",(0,i.jsxs)(n.p,{children:["The CRON expressions consists of 6 fields, separated by space: e.g. ",(0,i.jsx)(n.code,{children:"0 0/15 * * * *"})," , which describes time points every\n15 minutes starting from minute 0."]}),"\n",(0,i.jsxs)(n.p,{children:["CRON expression allow you to define specific ",(0,i.jsx)(n.strong,{children:"POINTS in time"})," they are NOT helpful to define time durations. They can\nbe seen\nhas the start time to trigger an action, for example initiating the sensor measurement or wireless sendout. The duration\nof an action is defined by a separate configuration parameter if needed."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Timezone and Daylight Saving",type:"warning",children:[(0,i.jsx)(n.p,{children:"All times are referenced to UTC+0 timezone! Keep this in mind when setting CRON configurations on Lobaro devices."}),(0,i.jsxs)(n.p,{children:["This implementation detail implies that daylight saving time switches will change the behavior of the device by one\nhour.",(0,i.jsx)(n.br,{}),"\n","Example for Central Europe:"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Winter: UTC+1 (Central European Time)"}),"\n",(0,i.jsx)(n.li,{children:"Summer: UTC+2 (Central European Summer Time)"}),"\n"]})]}),"\n",(0,i.jsx)(n.h2,{id:"meaning-of-the-six-field-parameter",children:"Meaning of the six field parameter"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"0 0/15 * * * *"})," - time points every 15 minutes starting from minute 0."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Second"}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Minute"}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Hour"}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Day of Month"}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Month of year"}),(0,i.jsx)(n.th,{style:{textAlign:"center"},children:"Day of Week"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Range"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(0-59)"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(0-59)"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(0-23)"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(1-31)"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(1-12)"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"(1-7)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Alternative"}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"JAN-DEC"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"MON-SUN"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:", - * /"})," special chars"]}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"?"})," special char"]}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"H L"})," special chars"]}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"W"})," special char"]}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:"yes"}),(0,i.jsx)(n.td,{style:{textAlign:"center"}}),(0,i.jsx)(n.td,{style:{textAlign:"center"}})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Example"}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)(n.strong,{children:"0"})}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)(n.strong,{children:"0/15"})}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)("b",{children:"*"})}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)("b",{children:"*"})}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)("b",{children:"*"})}),(0,i.jsx)(n.td,{style:{textAlign:"center"},children:(0,i.jsx)("b",{children:"*"})})]})]})]}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"H L W"})," are only supported on recent firmware releases, check product description for details."]})}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Day of Month"})," and ",(0,i.jsx)(n.strong,{children:"Day of Week"})," ",(0,i.jsx)(n.em,{children:"should"})," be treated ",(0,i.jsx)(n.strong,{children:"mutually exclusive"})," and one of them should be set to ",(0,i.jsx)(n.code,{children:"?"}),".",(0,i.jsx)(n.br,{}),"\n","As an example the following CRON may not have the intended behaviour if not following this advice:"]}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"0 0 1 1 * MON"})," Would only trigger on 1st of every month ",(0,i.jsx)(n.strong,{children:"that is"})," a Monday."]})]}),"\n",(0,i.jsx)(n.h3,{id:"star-asterisk-",children:"Star (Asterisk) *"}),"\n",(0,i.jsx)(n.p,{children:'Used to select all values within a field. For example, "*" in the minute field means "every minute".'}),"\n",(0,i.jsx)(n.h3,{id:"question-mark-",children:"Question mark (?)"}),"\n",(0,i.jsx)(n.p,{children:"Useful when you need to specify something in one of the two fields in which the character is allowed, but not the other.\nFor example, if I want my trigger to fire on a particular day of the month (say, the 10th), but don\u2019t care what day of\nthe week that happens to be, I would put \u201c10\u201d in the day-of-month field, and \u201c?\u201d in the day-of-week field. See the\nexamples below for clarification."}),"\n",(0,i.jsx)(n.h3,{id:"dash-minus--",children:"Dash, minus (-)"}),"\n",(0,i.jsx)(n.p,{children:"Used to specify ranges. For example, \u201c10-12\u201d in the hour field means \u201cthe hours 10, 11 and 12\u201d."}),"\n",(0,i.jsx)(n.h3,{id:"comma-",children:"Comma (,)"}),"\n",(0,i.jsx)(n.p,{children:'Used to specify multiple explicit values. For example, \u201cMON,WED,FRI\u201d in the day-of-week field means \u201cthe days Monday,\nWednesday, and Friday\u201d, "1,15" in the day-of-month field means "on the first and 15th of the month".'}),"\n",(0,i.jsx)(n.h3,{id:"slash-",children:"Slash (/)"}),"\n",(0,i.jsx)(n.p,{children:'Used to specify increments. For example, "0/15" in the seconds field means "0 and then every 15", that is "the seconds\n0, 15, 30, and 45". And "5/15" in the seconds field means "the seconds 5, 20, 35, and 50". You can also use "/" for\nother fields. "1/3" in the day-of-month field means "fire every 3 days starting on the first day of the month".'}),"\n",(0,i.jsx)(n.h3,{id:"weekday-w",children:"Weekday (W)"}),"\n",(0,i.jsxs)(n.p,{children:["Only valid in the day-of-month field. Used as a modifier added after a given day, e.g. ",(0,i.jsx)(n.code,{children:"15W"}),". This will execute on the\nnearest weekday (Monday to Friday) around that day. So ",(0,i.jsx)(n.code,{children:"0 0 12 15W * *"})," will execute on 12h UTC of the 15th of a month,\nif that day is a Monday, Tuesday, Wednesday, Thursday, of Friday. If the 15th is a Saturday, it will execute on 12h UTC\non Friday the 14th. If the 15th is a Sunday, it will execute on 12h UTC on Monday the 16th. It will however never jump\ninto another month. If you use ",(0,i.jsx)(n.code,{children:"1W"}),", and the first day of the month is a Saturday, it will execute on Monday the 3rd."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:['Can be used in combination with lists (comma ","), must be used for each individual value of the list you want to use\nit on, e.g. ',(0,i.jsx)(n.code,{children:"1W,15W"}),"."]}),"\n",(0,i.jsx)(n.li,{children:'Cannot be used with ranges (dash, "-") or increments (slash "/").'}),"\n",(0,i.jsxs)(n.li,{children:['Can be used in combination is hash ("H"), in the form ',(0,i.jsx)(n.code,{children:"HW"})," or e.g. ",(0,i.jsx)(n.code,{children:"H(6-9)W"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:['Can be used in combination with "L", but only as ',(0,i.jsx)(n.code,{children:"LW"}),", to execute on the last weekday of a month."]}),"\n"]})}),"\n",(0,i.jsx)(n.h3,{id:"last-l",children:"Last (L)"}),"\n",(0,i.jsx)(n.p,{children:"Has a different meaning, depending on where you use it."}),"\n",(0,i.jsxs)(n.p,{children:["A simple ",(0,i.jsx)(n.code,{children:"L"}),' means "the last of something". This is useful for the day-of-month field, as the last day of a month is\ndependent on the current month and year. ',(0,i.jsx)(n.code,{children:"0 0 12 L ?"})," will execute on the 31st of January, on the 28th or 29th (for leap\nyears) of February, on the 31st of March, on the 30th of April, and so on. You can also specify offsets from the last\nvalue, like this: ",(0,i.jsx)(n.code,{children:"0 0 12 L-3 * ?"}),". This executes on the 28th of January, on the 25th of 26th of February, and so on."]}),"\n",(0,i.jsxs)(n.p,{children:["In the day-of-week field ",(0,i.jsx)(n.code,{children:"L"})," simply refers to Sunday. But in combination with a number, it can be used to execute on the\nlast specific weekday of a month, like this: ",(0,i.jsx)(n.code,{children:"0 0 12 ? * 1L"})," will execute at 12h on the last Monday of every month."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Can be used in combination with ",(0,i.jsx)(n.code,{children:"W"}),", as ",(0,i.jsx)(n.code,{children:"LW"}),", to execute on the last weekday of a month."]}),"\n"]})}),"\n",(0,i.jsx)(n.h3,{id:"hash-h",children:"Hash (H)"}),"\n",(0,i.jsxs)(n.p,{children:["The character ",(0,i.jsx)(n.code,{children:"H"})," can be used in place of a number in any field of the cron. The ",(0,i.jsx)(n.code,{children:"H"})," wil be replaced with a consistent\npseudo random number, that fits into that field. On any given device this number will always be the same for a field,\nbut it\nwill differ for different devices. This can be used as a simple mechanism for load balancing, or to avoid collisions, if\nyou use a lot of devices."]}),"\n",(0,i.jsx)(n.p,{children:"Numbers will be 0-59 for second and minute fields, 0-23 for the hour field, 0-28 for the day-of-month field (it will\nnever activate on 29th, 30th, or 31st), 1-12 for the month field, and 1-7 for the day-of-week field."}),"\n",(0,i.jsxs)(n.p,{children:["When you, for example, set many devices to the cron ",(0,i.jsx)(n.code,{children:"0 0 4 * * *"}),", they will all activate at 4 AM UTC in the same\nsecond. For LoRaWAN devices, this will lead to a lot of packet collisions and therefore data loss, if the devices are in\nthe same area. For NB-IoT/LTE-M devices, it will lead to a concentrated workload on the server handling the requests and\nthe system evaluating the data. This can lead to bad system performance during that spike, while the system is idle most\nof the day."]}),"\n",(0,i.jsxs)(n.p,{children:["If instead of ",(0,i.jsx)(n.code,{children:"0 0 4 * * *"})," you set the devices to ",(0,i.jsx)(n.code,{children:"H H 4 * * *"}),", the two H characters will be replaced with a\nper-device-consistent random number in the range of 0-59, for example ",(0,i.jsx)(n.code,{children:"31 47 4 * * *"})," for one and ",(0,i.jsx)(n.code,{children:"17 0 4 * * *"})," for\nanother device. With this, the devices will all activate in the hour between 4 AM and 5 AM UTC and distribute the\nworkload."]}),"\n",(0,i.jsxs)(n.p,{children:["You can use ",(0,i.jsx)(n.code,{children:"H"})," to pick a pseudo random number from a specific range by specifying the range in parenthesis like this:\n",(0,i.jsx)(n.code,{children:"H(4-8)"})," will be replaced with any of the numbers 4, 5, 6, 7, 8. The range must only use numbers that are valid for the\nfield ",(0,i.jsx)(n.code,{children:"H"})," is used in."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'Can be used inside lists (comma ","), but the generated value could collide with other entries in list (see below).'}),"\n",(0,i.jsx)(n.li,{children:'Cannot be used with ranges (dash, "-").'}),"\n",(0,i.jsx)(n.li,{children:'Can be used with increments (slash, "/"), but only before the slash, as in "H(0-2)/3", not after it.'}),"\n"]})}),"\n",(0,i.jsx)(n.h4,{id:"pitfalls-with-using-h",children:"Pitfalls with using H"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Working with ",(0,i.jsx)(n.code,{children:"H"})," can be confusing and lead to unexpected results. It can be used in many places, but not all of them are\nuseful."]})}),"\n",(0,i.jsxs)(n.p,{children:["Writing ",(0,i.jsx)(n.code,{children:"0 H/10 * * * *"})," will on most devices create a cron that does not activate every 10 minutes. It\ncould evaluate to the expression ",(0,i.jsx)(n.code,{children:"0 47/10 * * * *"}),", which will only activate twice each hour, in minutes 47 and 57, but\nnot during minutes 0-46 at all. To have devices activate every 10 minutes at distributed times,\nuse ",(0,i.jsx)(n.code,{children:"0 H(0-9)/10 * * * *"})," or better yet: ",(0,i.jsx)(n.code,{children:"H H(0-9)/10 * * * *"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Using ",(0,i.jsx)(n.code,{children:"H"})," in a list works, but it might lead to fewer activations as intended. Putting it in a list twice will not\nproduce multiple activations, because both ",(0,i.jsx)(n.code,{children:"H"})," will evaluate to the same number: ",(0,i.jsx)(n.code,{children:"0 0 H,H * * *"})," could turn into ",(0,i.jsx)(n.code,{children:"0 0 3,3 * * *"}),", which is the same as ",(0,i.jsx)(n.code,{children:"0 0 3 * * *"}),". Using ",(0,i.jsx)(n.code,{children:"0 0 H(0-4),H(8-12) * * *"})," would work to produce two activations\nper day."]}),"\n",(0,i.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,i.jsx)(n.h3,{id:"standard-cron-syntax",children:"Standard CRON Syntax"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.th,{children:["Cron definition",(0,i.jsx)("div",{style:{width:"185px"}})]}),(0,i.jsx)(n.th,{children:"Description"}),(0,i.jsxs)(n.th,{children:["Trigger time points (hh:mm",":ss",")"]})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 5 * * * * "})}),(0,i.jsx)(n.td,{children:"Hourly at minute 5, second 0"}),(0,i.jsx)(n.td,{children:"00:05:00, 01:05:00, 02:05:00..."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 1/10 * * * * "})}),(0,i.jsx)(n.td,{children:"Every 10 minutes starting from minute 1, second 0"}),(0,i.jsx)(n.td,{children:"00:01:00, 00:11:00, 00:21:00, [...], 01:01:00, [...]"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 6 * * * "})}),(0,i.jsx)(n.td,{children:"Daily on hour 6, minute 0, second 0"}),(0,i.jsx)(n.td,{children:"06:00:00"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 13 1,15 * * "})}),(0,i.jsx)(n.td,{children:"Hour 13, minute 0, second 0 on day 1 and 15"}),(0,i.jsx)(n.td,{children:"13:00:00 at 1st and 15th of month"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 15 9 1-5 * * "})}),(0,i.jsx)(n.td,{children:"Hour 9, minute 15, second 0 on day 1 to 5"}),(0,i.jsx)(n.td,{children:"09:15:00 at 1st to 5th of month"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 6 * * 1 "})}),(0,i.jsx)(n.td,{children:"Weekly on Monday at 06:00:00"}),(0,i.jsx)(n.td,{children:"Monday, 06:00:00"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"extended-cron-syntax",children:"Extended CRON Syntax"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.th,{children:["Cron definition ",(0,i.jsx)("div",{style:{width:"185px"}})]}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 11 1W,15W * * "})}),(0,i.jsx)(n.td,{children:"11am on the days closest to the 1st and the 15th day each month that are not Saturdays or Sundays."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 15 1,L * * "})}),(0,i.jsx)(n.td,{children:"3pm on the first and last day of each month."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0 0 1 ? * 2L "})}),(0,i.jsx)(n.td,{children:"1am on the last Tuesday of each month."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"H H H(0-2) * * * "})}),(0,i.jsx)(n.td,{children:"Every day at a fixed pseudo random time between 00:00:00 and 02:59:59.Same time each day for a given device, but different time for different devices."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:" H H(0-9)/10 * * * *"})}),(0,i.jsx)(n.td,{children:"Every 10 minutes, but at a fixed time, randomly but consistently picked for each device."})]})]})]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["The Extended CRON Syntax will only work on recent firmware versions, e.g. the ",(0,i.jsx)(n.code,{children:"app-nrf9160-wmbus"})," firmware versions 0.15.4 and\nnewer.\nCheck the specific product manual to see if the extended syntax is implemented in the firmware."]})}),"\n",(0,i.jsx)(n.h2,{id:"further-reading",children:"Further Reading"}),"\n",(0,i.jsxs)(n.p,{children:["All our CRON expressions are in the same format as the ",(0,i.jsx)(n.strong,{children:"Java Quarz scheduler"}),", without the optional ",(0,i.jsx)(n.code,{children:"year"})," field and a\ndifferent way of numbering weekdays. Also the extended CRON field have been added by Lobaro. A good documentation\nincluding\nexamples can be found here:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html",children:"http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html"})}),"\n",(0,i.jsx)(n.h3,{id:"online-cron-generators",children:"Online CRON Generators"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.freeformatter.com/cron-expression-generator-quartz.html",children:"https://www.freeformatter.com/cron-expression-generator-quartz.html"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://crontab-generator.org/",children:"https://crontab-generator.org/"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'"command" need to be set to some random string'}),"\n",(0,i.jsx)(n.li,{children:'The generated CRON has no "seconds" field'}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://crontab.guru/",children:"https://crontab.guru/"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'The generated CRON has no "seconds" field'}),"\n"]}),"\n"]}),"\n"]})]})}function c(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>d,x:()=>l});var i=t(6540);const s={},r=i.createContext(s);function d(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/111ed76b.83fc10aa.js b/assets/js/111ed76b.83fc10aa.js deleted file mode 100644 index 584cb795..00000000 --- a/assets/js/111ed76b.83fc10aa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8428],{6486:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var t=n(4848),r=n(8453);const i={sidebar_position:1},a="Description",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"LoRaWAN Bridge V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/"},next:{title:"Wireless M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/"}},d={},c=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.admonition,{type:"warning",children:(0,t.jsx)(s.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(s.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(s.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(s.p,{children:["Get started by ",(0,t.jsx)(s.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Or ",(0,t.jsx)(s.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(s.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(s.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(s.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(s.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(s.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(s.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(s.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Open ",(0,t.jsx)(s.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(s.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>a,x:()=>o});var t=n(6540);const r={},i=t.createContext(r);function a(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/111ed76b.a07b5642.js b/assets/js/111ed76b.a07b5642.js new file mode 100644 index 00000000..34063343 --- /dev/null +++ b/assets/js/111ed76b.a07b5642.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8428],{6486:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var t=s(4848),r=s(8453);const i={sidebar_position:1},a="Description",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"LoRaWAN Bridge V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/"},next:{title:"Wireless M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(n.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(n.p,{children:["Get started by ",(0,t.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Or ",(0,t.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>o});var t=s(6540);const r={},i=t.createContext(r);function a(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1150a092.d09b21db.js b/assets/js/1150a092.d09b21db.js deleted file mode 100644 index f9ecd72f..00000000 --- a/assets/js/1150a092.d09b21db.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7364],{300:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>u});var r=t(4848),n=t(8453);const o={sidebar_position:1},i="Wireless M-BUS Gateways",a={id:"products/sensor-gateways/wireless-mbus-g3/index",title:"Wireless M-BUS Gateways",description:"This new documentation center is currently work in progress",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3",slug:"/products/sensor-gateways/wireless-mbus-g3/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Temperature",permalink:"/iot/products/sensor-gateways/temperature/"},next:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/"}},c={},u=[];function d(e){const s={admonition:"admonition",h1:"h1",p:"p",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"wireless-m-bus-gateways",children:"Wireless M-BUS Gateways"}),"\n",(0,r.jsx)(s.admonition,{type:"info",children:(0,r.jsx)(s.p,{children:"This new documentation center is currently work in progress"})})]})}function l(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>a});var r=t(6540);const n={},o=r.createContext(n);function i(e){const s=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1150a092.e517dff2.js b/assets/js/1150a092.e517dff2.js new file mode 100644 index 00000000..e4954f2e --- /dev/null +++ b/assets/js/1150a092.e517dff2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7364],{300:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>u});var n=t(4848),r=t(8453);const o={sidebar_position:1},i="Wireless M-BUS Gateways",a={id:"products/sensor-gateways/wireless-mbus-g3/index",title:"Wireless M-BUS Gateways",description:"This new documentation center is currently work in progress",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3",slug:"/products/sensor-gateways/wireless-mbus-g3/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Temperature",permalink:"/iot/products/sensor-gateways/temperature/"},next:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/"}},c={},u=[];function d(e){const s={admonition:"admonition",h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"wireless-m-bus-gateways",children:"Wireless M-BUS Gateways"}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsx)(s.p,{children:"This new documentation center is currently work in progress"})})]})}function l(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>a});var n=t(6540);const r={},o=n.createContext(r);function i(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/142d61b0.bc769cd5.js b/assets/js/142d61b0.bc769cd5.js new file mode 100644 index 00000000..75f53ba3 --- /dev/null +++ b/assets/js/142d61b0.bc769cd5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5907],{4369:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var o=t(4848),r=t(8453);const i={},a="Server Configuration",s={id:"platform/administration/server-configuration",title:"Server Configuration",description:"Server Admin (ssh access required)",source:"@site/docs/platform/administration/server-configuration.md",sourceDirName:"platform/administration",slug:"/platform/administration/server-configuration",permalink:"/iot/platform/administration/server-configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/server-configuration.md",tags:[],version:"current",frontMatter:{},sidebar:"allDocSidebar",previous:{title:"Server Certificates",permalink:"/iot/platform/administration/server-certificates"},next:{title:"Devices",permalink:"/iot/platform/devices/"}},l={},d=[{value:"Commandline and Environment Variables",id:"commandline-and-environment-variables",level:2},{value:"Configuration File",id:"configuration-file",level:2}];function c(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"server-configuration",children:"Server Configuration"}),"\n",(0,o.jsx)(n.admonition,{title:"Required roles",type:"info",children:(0,o.jsx)(n.p,{children:"Server Admin (ssh access required)"})}),"\n",(0,o.jsx)(n.p,{children:"Each value is loaded from different locations (highest priority first, e.g. 1. overrides 2.):"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Environment variables"}),"\n",(0,o.jsx)(n.li,{children:"Config File"}),"\n",(0,o.jsx)(n.li,{children:"Command line Flags"}),"\n",(0,o.jsx)(n.li,{children:"Default values"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"commandline-and-environment-variables",children:"Commandline and Environment Variables"}),"\n",(0,o.jsx)(n.p,{children:"Some options are only available via Environment Variables"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Environment Variable"}),(0,o.jsx)(n.th,{children:"Commandline parameter"}),(0,o.jsx)(n.th,{children:"Description"}),(0,o.jsx)(n.th,{children:"Version"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{}),(0,o.jsx)(n.td,{children:"--config"}),(0,o.jsxs)(n.td,{children:["Defile path of config file (default",":lobaro-iot-platform",".yml)"]}),(0,o.jsx)(n.td,{})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"LOB_JSON_LOGGING=1"}),(0,o.jsx)(n.td,{children:"--json_logging=1"}),(0,o.jsx)(n.td,{children:"Enable JSON Logging"}),(0,o.jsx)(n.td,{children:">= 1.84.1"})]})]})]}),"\n",(0,o.jsx)(n.h2,{id:"configuration-file",children:"Configuration File"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-toml",children:"# This is an generated example config file for the Lobaro Backend\n# On production systems you can change the default values as required\n\n# Enable debug log output\nDebug = false\n# License key for the Lobaro Backend to unlock certain features\nLicense = ''\n# TCP port for Tekelek devices\nTekelekTcpPort = 54345\n# TCP port for Dragino devices\nDraginoTcpPort = 5600\n# DevEUI Blocks for Hardware Provisioning\nDevEUIBlocks = []\n\n# Frontend HTTP Server Configuration\n[Server]\n# Frontend URL without trailing slash (not needed when using a single domain)\nFrontendUrl = ''\n# Port to listen on, deprecated in favour of Bind. When Bins is set Port is ignored\nPort = 0\n# Address to bind to, e.g. :8082\nBind = ':8082'\n# Enable development mode. Not safe for production!\n# Authentication might be disabled.\nDevMode = false\n# Token secret to encrypt API Tokens. When changed, all existing Tokens are invalidated.\nApiTokenSecret = ''\n# Token secret to encrypt User Tokens. When changed, all existing Tokens are invalidated.\nOauthTokenSecret = ''\n# Token secret to encrypt User Refresh Tokens. When changed, all existing Tokens are invalidated.\nOauthRefreshTokenSecret = ''\n# Directory where all file based data is stored\nDataDir = './data'\n\n# DTLS Configuration, used by CoAPs Server\n[Server.DtlsConfig]\nDtlsCertDir = ''\nDtlsCertName = ''\nAcceptPoolSize = 10000\n\n# Customer specific branding configuration\n[Branding]\nPlatformName = 'IoT Platform'\nFrontendBaseUrl = ''\nDefaultLogoUrl = '/static/branding/logo.svg'\nLegalDisclosureUrl = 'https://www.lobaro.com/contact/'\nParserDocUrl = 'https://doc.lobaro.com/x/Y4B5'\nDisplayDocLinks = true\nIntegrationDocUrl = 'https://doc.lobaro.com/x/YIB5'\nAllowRegistration = false\nFavicon = '/static/img/favicon.ico'\n\n# Deprecated: use BrandingConfig\n[Whitelabel]\nPlatformName = ''\n\n# Postgres Database Configuration\n[Database]\nDatabase = 'postgres'\n# Schema for the database, default is public. If empty string the search_path will be determined by the db\nSchema = 'public'\nUsername = 'postgres'\nPassword = 'admin'\nHost = 'localhost'\nPort = 5432\nSslMode = 'disable'\nMaxOpenConns = 90\nMaxIdleConns = 20\n# Enable debug log output for the database\nDebug = false\nAutoFixMigration = false\n# Threshold for slow queries in milliseconds\nSlowQueryThresholdMs = 5000\n\n# Cache Configuration\n[Database.Cache]\n# Expiration time for the device cache in seconds, 0 = no cache\nDeviceExpirationSec = 600\n# Disable the local cache\nLocalCacheDisabled = false\n# Expiration time for the local cache in seconds\nLocalCacheExpirationSec = 3600\n# Purge time for the local cache in seconds\nLocalCachePurgeSec = 3600\n\n# Email Server settings\n[Email]\nServer = ''\nTls = false\nUsername = ''\nPassword = ''\nSender = ''\n\n# CoAP(s) Server Configuration\n[CoapServer]\n# CoAP port\nCoapPort = 5683\n# CoAPs port\nCoapsPort = 5684\n\n# Digimondo Platform specific settings\n[Digimondo]\nApiKey = ''\n\n# MQTT Broker Configuration for outbound MQTT Integrations\n[Mqtt]\nName = ''\nClientId = ''\nBroker = ''\nUsername = ''\nPassword = ''\n\n# Internal MQTT Broker Configuration\n[MqttBrokerConfig]\nStartBroker = false\nAdminUsername = 'admin'\nAdminPassword = 'admin'\n# port used for broker\nPort = 1883\n\n# DevEUI Provisioning Configuration\n[DevEUIConfig]\n# When set to true, the server will assign a new DevEUI when a device with that DevEUI already exists in the platform\nCheckDeviceExistOnNewEui = false\n\n# Allows to enable/disable single features\n[FeatureToggle]\nHardwareActivationEnabled = true\nWmbusParserApiTabEnabled = true\nWmbusParserApiPublic = false\n\n# JavaScript Device Parser Configuration\n[Parser]\nTimeoutMs = 250\n\n# Device Data Storage related Configuration\n[Data]\nDefaultRetentionDuration = ''\n\n# Organisation related Configuration\n[Organisation]\nDefaultUserLimit = 0\nDefaultMaxSubOrganisations = 0\nMaxDepthSubOrganisations = 10\n\n# NATS related Configuration. NATS is used as the internal Message Broker\n[Nats]\n# Start the internal nats server, host has to be localhost then\nStartNatsServer = true\n# NATS server hostname or IP address to connect to\nHost = 'localhost'\n# NATS server port to connect to\nPort = 4222\nUsername = 'admin'\nPassword = 'admin'\nHTTPPort = 8222\n# Enable NATS for CoAP and CoAPs datasource\nEnableCoapDatasource = false\n# Size of the NATS client pool for publishing messages\nClientPoolSize = 1000\n# Hostname or IP address of the config companion\nConfigCompanionHost = 'localhost'\n# Port of the config companion\nConfigCompanionPort = 8099\n# Number of workers for the uplink handler queue\nUplinkHandlerWorkers = 2\n# Number of workers for the integrations queue\nIntegrationHandlerWorkers = 4\n# Maximum memory (RAM) size of JetStream streams in bytes\nJetStreamMaxMemory = 1073741824\n# Maximum memory (disk) usage of JetStream streams in bytes\nJetStreamMaxStore = 0\n# Path to store JetStream data\nJetStreamStoreDirectory = './data/jetstream'\n\n# general Config regarding the REST API offered by the platform\n[RestApiConfig]\nLogBodyOnPanic = false\nLogHttpHeaderOnPanic = false\n\n# Integration related Configuration\n[Integration]\n# Default timeout for MQTT integrations in milliseconds\nMqttDefaultTimeoutMs = 10000\n# Default timeout for HTTP integrations in milliseconds\nHttpDefaultTimeoutMs = 10000\n# Rate limit for updating logging in case if success Seconds, 0 for no limit\nLoggingSuccessRateLimitSeconds = 10\n# Rate limit for updating logging in case of error/failur in Seconds, 0 for no limit\nLoggingErrorRateLimitSeconds = 10\n"})})]})}function f(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>s});var o=t(6540);const r={},i=o.createContext(r);function a(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/142d61b0.cb0e81ba.js b/assets/js/142d61b0.cb0e81ba.js deleted file mode 100644 index 649b9318..00000000 --- a/assets/js/142d61b0.cb0e81ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5907],{4369:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var o=t(4848),r=t(8453);const i={},a="Server Configuration",s={id:"platform/administration/server-configuration",title:"Server Configuration",description:"Server Admin (ssh access required)",source:"@site/docs/platform/administration/server-configuration.md",sourceDirName:"platform/administration",slug:"/platform/administration/server-configuration",permalink:"/iot/platform/administration/server-configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/server-configuration.md",tags:[],version:"current",frontMatter:{},sidebar:"cloudSidebar",previous:{title:"Server Certificates",permalink:"/iot/platform/administration/server-certificates"},next:{title:"Devices",permalink:"/iot/platform/devices/"}},l={},d=[{value:"Commandline and Environment Variables",id:"commandline-and-environment-variables",level:2},{value:"Configuration File",id:"configuration-file",level:2}];function c(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"server-configuration",children:"Server Configuration"}),"\n",(0,o.jsx)(n.admonition,{title:"Required roles",type:"info",children:(0,o.jsx)(n.p,{children:"Server Admin (ssh access required)"})}),"\n",(0,o.jsx)(n.p,{children:"Each value is loaded from different locations (highest priority first, e.g. 1. overrides 2.):"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Environment variables"}),"\n",(0,o.jsx)(n.li,{children:"Config File"}),"\n",(0,o.jsx)(n.li,{children:"Command line Flags"}),"\n",(0,o.jsx)(n.li,{children:"Default values"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"commandline-and-environment-variables",children:"Commandline and Environment Variables"}),"\n",(0,o.jsx)(n.p,{children:"Some options are only available via Environment Variables"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Environment Variable"}),(0,o.jsx)(n.th,{children:"Commandline parameter"}),(0,o.jsx)(n.th,{children:"Description"}),(0,o.jsx)(n.th,{children:"Version"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{}),(0,o.jsx)(n.td,{children:"--config"}),(0,o.jsxs)(n.td,{children:["Defile path of config file (default",":lobaro-iot-platform",".yml)"]}),(0,o.jsx)(n.td,{})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"LOB_JSON_LOGGING=1"}),(0,o.jsx)(n.td,{children:"--json_logging=1"}),(0,o.jsx)(n.td,{children:"Enable JSON Logging"}),(0,o.jsx)(n.td,{children:">= 1.84.1"})]})]})]}),"\n",(0,o.jsx)(n.h2,{id:"configuration-file",children:"Configuration File"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-toml",children:"# This is an generated example config file for the Lobaro Backend\n# On production systems you can change the default values as required\n\n# Enable debug log output\nDebug = false\n# License key for the Lobaro Backend to unlock certain features\nLicense = ''\n# TCP port for Tekelek devices\nTekelekTcpPort = 54345\n# TCP port for Dragino devices\nDraginoTcpPort = 5600\n# DevEUI Blocks for Hardware Provisioning\nDevEUIBlocks = []\n\n# Frontend HTTP Server Configuration\n[Server]\n# Frontend URL without trailing slash (not needed when using a single domain)\nFrontendUrl = ''\n# Port to listen on, deprecated in favour of Bind. When Bins is set Port is ignored\nPort = 0\n# Address to bind to, e.g. :8082\nBind = ':8082'\n# Enable development mode. Not safe for production!\n# Authentication might be disabled.\nDevMode = false\n# Token secret to encrypt API Tokens. When changed, all existing Tokens are invalidated.\nApiTokenSecret = ''\n# Token secret to encrypt User Tokens. When changed, all existing Tokens are invalidated.\nOauthTokenSecret = ''\n# Token secret to encrypt User Refresh Tokens. When changed, all existing Tokens are invalidated.\nOauthRefreshTokenSecret = ''\n# Directory where all file based data is stored\nDataDir = './data'\n\n# DTLS Configuration, used by CoAPs Server\n[Server.DtlsConfig]\nDtlsCertDir = ''\nDtlsCertName = ''\nAcceptPoolSize = 10000\n\n# Customer specific branding configuration\n[Branding]\nPlatformName = 'IoT Platform'\nFrontendBaseUrl = ''\nDefaultLogoUrl = '/static/branding/logo.svg'\nLegalDisclosureUrl = 'https://www.lobaro.com/contact/'\nParserDocUrl = 'https://doc.lobaro.com/x/Y4B5'\nDisplayDocLinks = true\nIntegrationDocUrl = 'https://doc.lobaro.com/x/YIB5'\nAllowRegistration = false\nFavicon = '/static/img/favicon.ico'\n\n# Deprecated: use BrandingConfig\n[Whitelabel]\nPlatformName = ''\n\n# Postgres Database Configuration\n[Database]\nDatabase = 'postgres'\n# Schema for the database, default is public. If empty string the search_path will be determined by the db\nSchema = 'public'\nUsername = 'postgres'\nPassword = 'admin'\nHost = 'localhost'\nPort = 5432\nSslMode = 'disable'\nMaxOpenConns = 90\nMaxIdleConns = 20\n# Enable debug log output for the database\nDebug = false\nAutoFixMigration = false\n# Threshold for slow queries in milliseconds\nSlowQueryThresholdMs = 5000\n\n# Cache Configuration\n[Database.Cache]\n# Expiration time for the device cache in seconds, 0 = no cache\nDeviceExpirationSec = 600\n# Disable the local cache\nLocalCacheDisabled = false\n# Expiration time for the local cache in seconds\nLocalCacheExpirationSec = 3600\n# Purge time for the local cache in seconds\nLocalCachePurgeSec = 3600\n\n# Email Server settings\n[Email]\nServer = ''\nTls = false\nUsername = ''\nPassword = ''\nSender = ''\n\n# CoAP(s) Server Configuration\n[CoapServer]\n# CoAP port\nCoapPort = 5683\n# CoAPs port\nCoapsPort = 5684\n\n# Digimondo Platform specific settings\n[Digimondo]\nApiKey = ''\n\n# MQTT Broker Configuration for outbound MQTT Integrations\n[Mqtt]\nName = ''\nClientId = ''\nBroker = ''\nUsername = ''\nPassword = ''\n\n# Internal MQTT Broker Configuration\n[MqttBrokerConfig]\nStartBroker = false\nAdminUsername = 'admin'\nAdminPassword = 'admin'\n# port used for broker\nPort = 1883\n\n# DevEUI Provisioning Configuration\n[DevEUIConfig]\n# When set to true, the server will assign a new DevEUI when a device with that DevEUI already exists in the platform\nCheckDeviceExistOnNewEui = false\n\n# Allows to enable/disable single features\n[FeatureToggle]\nHardwareActivationEnabled = true\nWmbusParserApiTabEnabled = true\nWmbusParserApiPublic = false\n\n# JavaScript Device Parser Configuration\n[Parser]\nTimeoutMs = 250\n\n# Device Data Storage related Configuration\n[Data]\nDefaultRetentionDuration = ''\n\n# Organisation related Configuration\n[Organisation]\nDefaultUserLimit = 0\nDefaultMaxSubOrganisations = 0\nMaxDepthSubOrganisations = 10\n\n# NATS related Configuration. NATS is used as the internal Message Broker\n[Nats]\n# Start the internal nats server, host has to be localhost then\nStartNatsServer = true\n# NATS server hostname or IP address to connect to\nHost = 'localhost'\n# NATS server port to connect to\nPort = 4222\nUsername = 'admin'\nPassword = 'admin'\nHTTPPort = 8222\n# Enable NATS for CoAP and CoAPs datasource\nEnableCoapDatasource = false\n# Size of the NATS client pool for publishing messages\nClientPoolSize = 1000\n# Hostname or IP address of the config companion\nConfigCompanionHost = 'localhost'\n# Port of the config companion\nConfigCompanionPort = 8099\n# Number of workers for the uplink handler queue\nUplinkHandlerWorkers = 2\n# Number of workers for the integrations queue\nIntegrationHandlerWorkers = 4\n# Maximum memory (RAM) size of JetStream streams in bytes\nJetStreamMaxMemory = 1073741824\n# Maximum memory (disk) usage of JetStream streams in bytes\nJetStreamMaxStore = 0\n# Path to store JetStream data\nJetStreamStoreDirectory = './data/jetstream'\n\n# general Config regarding the REST API offered by the platform\n[RestApiConfig]\nLogBodyOnPanic = false\nLogHttpHeaderOnPanic = false\n\n# Integration related Configuration\n[Integration]\n# Default timeout for MQTT integrations in milliseconds\nMqttDefaultTimeoutMs = 10000\n# Default timeout for HTTP integrations in milliseconds\nHttpDefaultTimeoutMs = 10000\n# Rate limit for updating logging in case if success Seconds, 0 for no limit\nLoggingSuccessRateLimitSeconds = 10\n# Rate limit for updating logging in case of error/failur in Seconds, 0 for no limit\nLoggingErrorRateLimitSeconds = 10\n"})})]})}function f(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>s});var o=t(6540);const r={},i=o.createContext(r);function a(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/17f2f278.76cfd1df.js b/assets/js/17f2f278.76cfd1df.js new file mode 100644 index 00000000..655f4bb5 --- /dev/null +++ b/assets/js/17f2f278.76cfd1df.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5706],{3321:(e,A,o)=>{e.exports={src:{srcSet:o.p+"assets/images/ideal-img/Lobaro-Design-Cover-wmbus-gateway.c11f4d0.1158.jpg 1158w",images:[{path:o.p+"assets/images/ideal-img/Lobaro-Design-Cover-wmbus-gateway.c11f4d0.1158.jpg",width:1158,height:1026}],src:o.p+"assets/images/ideal-img/Lobaro-Design-Cover-wmbus-gateway.c11f4d0.1158.jpg",toString:function(){return o.p+"assets/images/ideal-img/Lobaro-Design-Cover-wmbus-gateway.c11f4d0.1158.jpg"},placeholder:void 0,width:1158,height:1026},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAJAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAgUI/8QAIhABAAECBgIDAAAAAAAAAAAAAQIDIQAEBRExYRJEcXKx/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oADAMBAAIRAxEAPwDROa1PM0tSnSlTmX8aRE3KnXUvm21x52vQVhFkBJLhcwPafofuGcGEg//Z"}},6832:(e,A,o)=>{e.exports={src:{srcSet:o.p+"assets/images/ideal-img/Lobaro-housing-dimensions2.6c599bb.1118.jpg 1118w",images:[{path:o.p+"assets/images/ideal-img/Lobaro-housing-dimensions2.6c599bb.1118.jpg",width:1118,height:863}],src:o.p+"assets/images/ideal-img/Lobaro-housing-dimensions2.6c599bb.1118.jpg",toString:function(){return o.p+"assets/images/ideal-img/Lobaro-housing-dimensions2.6c599bb.1118.jpg"},placeholder:void 0,width:1118,height:863},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAIAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQI/8QAHxAAAgIBBAMAAAAAAAAAAAAAAQIAAxEEEiFRFEFx/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ANMaryrDtrZkAYnPIyPXOD9l1IYU1h23MFGT2e4iB//Z"}},2937:(e,A,o)=>{e.exports={src:{srcSet:o.p+"assets/images/ideal-img/housing-spelsberg-closed.ace3a58.760.jpg 760w",images:[{path:o.p+"assets/images/ideal-img/housing-spelsberg-closed.ace3a58.760.jpg",width:760,height:760}],src:o.p+"assets/images/ideal-img/housing-spelsberg-closed.ace3a58.760.jpg",toString:function(){return o.p+"assets/images/ideal-img/housing-spelsberg-closed.ace3a58.760.jpg"},placeholder:void 0,width:760,height:760},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAKAAoDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAQMGB//EACEQAAIBBAEFAQAAAAAAAAAAAAECAwAEESESBRMUFVKR/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAL/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAwDAQACEQMRAD8A3Ruu3Mkzq0vEBiBxyNZoe6lXXnkY1g8dVWw2dshZlt4VYsSSEAyc0/tp8L+UTH//2Q=="}},789:(e,A,o)=>{"use strict";o.r(A),o.d(A,{assets:()=>a,contentTitle:()=>t,default:()=>c,frontMatter:()=>n,metadata:()=>r,toc:()=>g});var s=o(4848),i=o(8453);const n={sidebar_position:1,title:"Spelsberg TG PC 1208-6-o"},t="Spelsberg TG PC 1208-6-o",r={id:"components/enclosures/spelsberg_TG_PC_1208-6-o",title:"Spelsberg TG PC 1208-6-o",description:"Spelsberg TG PC 1208-6-o Housing{"use strict";o.d(A,{R:()=>t,x:()=>r});var s=o(6540);const i={},n=s.createContext(i);function t(e){const A=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(A):{...A,...e}}),[A,e])}function r(e){let A;return A=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),s.createElement(n.Provider,{value:A},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/17f2f278.a4e1b3d9.js b/assets/js/17f2f278.a4e1b3d9.js deleted file mode 100644 index 4c08a742..00000000 --- a/assets/js/17f2f278.a4e1b3d9.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5706],{3321:(e,o,A)=>{e.exports={src:{srcSet:A.p+"assets/images/ideal-img/Lobaro-Design-Cover-wmbus-gateway.c11f4d0.1158.jpg 1158w",images:[{path:A.p+"assets/images/ideal-img/Lobaro-Design-Cover-wmbus-gateway.c11f4d0.1158.jpg",width:1158,height:1026}],src:A.p+"assets/images/ideal-img/Lobaro-Design-Cover-wmbus-gateway.c11f4d0.1158.jpg",toString:function(){return A.p+"assets/images/ideal-img/Lobaro-Design-Cover-wmbus-gateway.c11f4d0.1158.jpg"},placeholder:void 0,width:1158,height:1026},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAJAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAgUI/8QAIhABAAECBgIDAAAAAAAAAAAAAQIDIQAEBRExYRJEcXKx/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oADAMBAAIRAxEAPwDROa1PM0tSnSlTmX8aRE3KnXUvm21x52vQVhFkBJLhcwPafofuGcGEg//Z"}},6832:(e,o,A)=>{e.exports={src:{srcSet:A.p+"assets/images/ideal-img/Lobaro-housing-dimensions2.6c599bb.1118.jpg 1118w",images:[{path:A.p+"assets/images/ideal-img/Lobaro-housing-dimensions2.6c599bb.1118.jpg",width:1118,height:863}],src:A.p+"assets/images/ideal-img/Lobaro-housing-dimensions2.6c599bb.1118.jpg",toString:function(){return A.p+"assets/images/ideal-img/Lobaro-housing-dimensions2.6c599bb.1118.jpg"},placeholder:void 0,width:1118,height:863},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAIAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQI/8QAHxAAAgIBBAMAAAAAAAAAAAAAAQIAAxEEEiFRFEFx/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ANMaryrDtrZkAYnPIyPXOD9l1IYU1h23MFGT2e4iB//Z"}},2937:(e,o,A)=>{e.exports={src:{srcSet:A.p+"assets/images/ideal-img/housing-spelsberg-closed.ace3a58.760.jpg 760w",images:[{path:A.p+"assets/images/ideal-img/housing-spelsberg-closed.ace3a58.760.jpg",width:760,height:760}],src:A.p+"assets/images/ideal-img/housing-spelsberg-closed.ace3a58.760.jpg",toString:function(){return A.p+"assets/images/ideal-img/housing-spelsberg-closed.ace3a58.760.jpg"},placeholder:void 0,width:760,height:760},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAKAAoDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAQMGB//EACEQAAIBBAEFAQAAAAAAAAAAAAECAwAEESESBRMUFVKR/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAL/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAwDAQACEQMRAD8A3Ruu3Mkzq0vEBiBxyNZoe6lXXnkY1g8dVWw2dshZlt4VYsSSEAyc0/tp8L+UTH//2Q=="}},789:(e,o,A)=>{"use strict";A.r(o),A.d(o,{assets:()=>r,contentTitle:()=>t,default:()=>c,frontMatter:()=>n,metadata:()=>a,toc:()=>g});var s=A(4848),i=A(8453);const n={sidebar_position:1,displayed_sidebar:"componentsSidebar",title:"Spelsberg TG PC 1208-6-o"},t="Spelsberg TG PC 1208-6-o",a={id:"components/enclosures/spelsberg_TG_PC_1208-6-o",title:"Spelsberg TG PC 1208-6-o",description:"Spelsberg TG PC 1208-6-o Housing{"use strict";A.d(o,{R:()=>t,x:()=>a});var s=A(6540);const i={},n=s.createContext(i);function t(e){const o=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),s.createElement(n.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/193f150b.7c2f4ee7.js b/assets/js/193f150b.7c2f4ee7.js new file mode 100644 index 00000000..7d89b2c1 --- /dev/null +++ b/assets/js/193f150b.7c2f4ee7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[6050],{2637:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>a,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>d,toc:()=>p});var t=n(4848),r=n(8453);const i={sidebar_position:1,title:"app-hybrid-modbus"},s="app-hybrid-modbus",d={id:"components/firmware/app-hybrid-modbus/index",title:"app-hybrid-modbus",description:"This new documentation center is currently work in progress",source:"@site/docs/components/firmware/app-hybrid-modbus/index.md",sourceDirName:"components/firmware/app-hybrid-modbus",slug:"/components/firmware/app-hybrid-modbus/",permalink:"/iot/components/firmware/app-hybrid-modbus/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-hybrid-modbus/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"app-hybrid-modbus"},sidebar:"allDocSidebar",previous:{title:"Changelog & Updates",permalink:"/iot/components/firmware/app-nrf9160-wmbus/changelog-download"},next:{title:"Device Enclosures",permalink:"/iot/components/enclosures/"}},a={},p=[];function c(e){const o={admonition:"admonition",h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"app-hybrid-modbus",children:"app-hybrid-modbus"}),"\n",(0,t.jsx)(o.admonition,{type:"info",children:(0,t.jsx)(o.p,{children:"This new documentation center is currently work in progress"})})]})}function m(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,o,n)=>{n.d(o,{R:()=>s,x:()=>d});var t=n(6540);const r={},i=t.createContext(r);function s(e){const o=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/193f150b.8b677000.js b/assets/js/193f150b.8b677000.js deleted file mode 100644 index cfd7cd01..00000000 --- a/assets/js/193f150b.8b677000.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[6050],{2637:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>d,toc:()=>p});var t=o(4848),r=o(8453);const i={sidebar_position:1,displayed_sidebar:"componentsSidebar",title:"app-hybrid-modbus"},s="app-hybrid-modbus",d={id:"components/firmware/app-hybrid-modbus/index",title:"app-hybrid-modbus",description:"This new documentation center is currently work in progress",source:"@site/docs/components/firmware/app-hybrid-modbus/index.md",sourceDirName:"components/firmware/app-hybrid-modbus",slug:"/components/firmware/app-hybrid-modbus/",permalink:"/iot/components/firmware/app-hybrid-modbus/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-hybrid-modbus/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,displayed_sidebar:"componentsSidebar",title:"app-hybrid-modbus"},sidebar:"componentsSidebar",previous:{title:"Changelog & Updates",permalink:"/iot/components/firmware/app-nrf9160-wmbus/changelog-download"},next:{title:"Device Enclosures",permalink:"/iot/components/enclosures/"}},a={},p=[];function c(e){const n={admonition:"admonition",h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"app-hybrid-modbus",children:"app-hybrid-modbus"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"This new documentation center is currently work in progress"})})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>s,x:()=>d});var t=o(6540);const r={},i=t.createContext(r);function s(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1c619603.7114648f.js b/assets/js/1c619603.7114648f.js new file mode 100644 index 00000000..da4bf507 --- /dev/null +++ b/assets/js/1c619603.7114648f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2582],{8847:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>u});var n=o(4848),r=o(8453);const s={sidebar_position:1},i="Current Loop Sensors (4...20 mA)",c={id:"products/sensor-gateways/current-loop/index",title:"Current Loop Sensors (4...20 mA)",description:"This new documentation center is currently work in progress",source:"@site/docs/products/sensor-gateways/current-loop/index.md",sourceDirName:"products/sensor-gateways/current-loop",slug:"/products/sensor-gateways/current-loop/",permalink:"/iot/products/sensor-gateways/current-loop/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/current-loop/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"wM-Bus GW (Solar)",permalink:"/iot/products/metering-gateways/wireless-mbus-gateway-sun-v1"},next:{title:"Liquid Level",permalink:"/iot/products/sensor-gateways/level/"}},a={},u=[];function d(e){const t={admonition:"admonition",h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"current-loop-sensors-420-ma",children:"Current Loop Sensors (4...20 mA)"}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsx)(t.p,{children:"This new documentation center is currently work in progress"})})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>i,x:()=>c});var n=o(6540);const r={},s=n.createContext(r);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1c619603.b54805d9.js b/assets/js/1c619603.b54805d9.js deleted file mode 100644 index 8969ee3d..00000000 --- a/assets/js/1c619603.b54805d9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2582],{8847:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>u});var n=o(4848),r=o(8453);const s={sidebar_position:1},i="Current Loop Sensors (4...20 mA)",c={id:"products/sensor-gateways/current-loop/index",title:"Current Loop Sensors (4...20 mA)",description:"This new documentation center is currently work in progress",source:"@site/docs/products/sensor-gateways/current-loop/index.md",sourceDirName:"products/sensor-gateways/current-loop",slug:"/products/sensor-gateways/current-loop/",permalink:"/iot/products/sensor-gateways/current-loop/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/current-loop/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"wM-Bus GW (Solar)",permalink:"/iot/products/metering-gateways/wireless-mbus-gateway-sun-v1"},next:{title:"Liquid Level",permalink:"/iot/products/sensor-gateways/level/"}},a={},u=[];function d(e){const t={admonition:"admonition",h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"current-loop-sensors-420-ma",children:"Current Loop Sensors (4...20 mA)"}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsx)(t.p,{children:"This new documentation center is currently work in progress"})})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>i,x:()=>c});var n=o(6540);const r={},s=n.createContext(r);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1d8bdfb7.a4943440.js b/assets/js/1d8bdfb7.f20f74dd.js similarity index 96% rename from assets/js/1d8bdfb7.a4943440.js rename to assets/js/1d8bdfb7.f20f74dd.js index 43efedd0..b1e5ac3d 100644 --- a/assets/js/1d8bdfb7.a4943440.js +++ b/assets/js/1d8bdfb7.f20f74dd.js @@ -1 +1 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7225],{4426:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var r=o(4848),n=o(8453);const a={title:"FAQ"},s="FAQ - Lobaro Platform",i={id:"platform/faq",title:"FAQ",description:"Why is the Lobaro Platform mandatory for our NB-IoT Sensors & Gateways?",source:"@site/docs/platform/faq.md",sourceDirName:"platform",slug:"/platform/faq",permalink:"/iot/platform/faq",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/faq.md",tags:[],version:"current",frontMatter:{title:"FAQ"},sidebar:"cloudSidebar",previous:{title:"Dragino",permalink:"/iot/platform/3rd-party/dragino"}},l={},d=[{value:"Why is the Lobaro Platform mandatory for our NB-IoT Sensors & Gateways?",id:"why-is-the-lobaro-platform-mandatory-for-our-nb-iot-sensors--gateways",level:2}];function c(e){const t={h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"faq---lobaro-platform",children:"FAQ - Lobaro Platform"}),"\n",(0,r.jsx)(t.h2,{id:"why-is-the-lobaro-platform-mandatory-for-our-nb-iot-sensors--gateways",children:"Why is the Lobaro Platform mandatory for our NB-IoT Sensors & Gateways?"}),"\n",(0,r.jsx)(t.p,{children:"This question sometimes arises from integrators who run their own type of IoT platform tailored to a particular use-case\nand don't want an intermediate between their system and the IoT hardware to integrate. In contrast to this our platform\nis primary considered as a head end system for device management of Lobaro and 3rd party sensors and gateways. It's\nmeant as secure, stable\nand scalable abstraction layer to the actual hardware complexity and gives the following benefits to the integrator or\nend-user:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Encrypted data transfers using UDP and NB-IoT"}),", client and server certificate-based, using DTLS, while still being\nable to use battery life friendly UDP transfers with little overhead."]}),"\n",(0,r.jsx)(t.li,{children:"Administration of client and server certificates."}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Remote configuration"})," of sensors via simple APIs (Web UI, REST)."]}),"\n",(0,r.jsxs)(t.li,{children:["Support for ",(0,r.jsx)(t.strong,{children:"Firmware Updates"})," Over The Air (FOTA)."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Scalability"}),", even with thousands of devices."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Intermediate storage"})," for sensor data before further processing in the downstream application."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Data insight and export"})," independent of downstream application via CSV export or REST API."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Integration with LoRaWAN Network Servers"})," like ChirpStack, TTN / TTI, Lotiot, and many more ..."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Unified API for downstream applications"})," across different connectivity technologies on the device side (e.g.\nNB-IoT,\nLoRaWAN, wireless MBUS, LAN)."]}),"\n",(0,r.jsx)(t.li,{children:"Quickly bring IoT applications to market by focusing on the use case and the actual data without having to deal with\nhardware and firmware implementation details or properly secured data transfers from the sensor to the cloud."}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Low hardware requirements"})," for the server of the Lobaro Platform. Small setups can run on the same server next to\nthe\nuse-case specific platform or even an Raspberry PI for embedded use-cases. Bigger setups can be auto scaled in cloud\nenvironments."]}),"\n",(0,r.jsxs)(t.li,{children:["Internal APIs between hardware and Lobaro Platform can be changed, e.g. for firmware extensions, without compromising\na ",(0,r.jsx)(t.strong,{children:"stable API to the downstream system"})," and thus increasing the stability of the end application."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["As one might see, all these functionality require a high level of knowledge about the hardware and how it internally\nworks. ",(0,r.jsx)(t.strong,{children:"Lobaro can only provide support and guarantees that all features of our NB-IoT products are available and\nfunction as expected if the Lobaro Platform is also used as a counterpart."})]}),"\n",(0,r.jsx)(t.p,{children:"If using the Lobaro IoT platform is absolutely not an option many of our NB-IoT products can also be configured to use\nLoRaWAN uplinks which shifts the dependence to the used LoRaWAN network server beside the well-known challenges of\nLoRaWAN networks compared to cellular IoT. We also work on Direct MQTT support for some of our devices to allow direct\nintegrations with a custom broker."})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>s,x:()=>i});var r=o(6540);const n={},a=r.createContext(n);function s(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7225],{4426:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var r=o(4848),n=o(8453);const a={title:"FAQ"},s="FAQ - Lobaro Platform",i={id:"platform/faq",title:"FAQ",description:"Why is the Lobaro Platform mandatory for our NB-IoT Sensors & Gateways?",source:"@site/docs/platform/faq.md",sourceDirName:"platform",slug:"/platform/faq",permalink:"/iot/platform/faq",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/faq.md",tags:[],version:"current",frontMatter:{title:"FAQ"},sidebar:"allDocSidebar",previous:{title:"Dragino",permalink:"/iot/platform/3rd-party/dragino"},next:{title:"Knowledge Base",permalink:"/iot/knowledge-base/"}},l={},d=[{value:"Why is the Lobaro Platform mandatory for our NB-IoT Sensors & Gateways?",id:"why-is-the-lobaro-platform-mandatory-for-our-nb-iot-sensors--gateways",level:2}];function c(e){const t={h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"faq---lobaro-platform",children:"FAQ - Lobaro Platform"}),"\n",(0,r.jsx)(t.h2,{id:"why-is-the-lobaro-platform-mandatory-for-our-nb-iot-sensors--gateways",children:"Why is the Lobaro Platform mandatory for our NB-IoT Sensors & Gateways?"}),"\n",(0,r.jsx)(t.p,{children:"This question sometimes arises from integrators who run their own type of IoT platform tailored to a particular use-case\nand don't want an intermediate between their system and the IoT hardware to integrate. In contrast to this our platform\nis primary considered as a head end system for device management of Lobaro and 3rd party sensors and gateways. It's\nmeant as secure, stable\nand scalable abstraction layer to the actual hardware complexity and gives the following benefits to the integrator or\nend-user:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Encrypted data transfers using UDP and NB-IoT"}),", client and server certificate-based, using DTLS, while still being\nable to use battery life friendly UDP transfers with little overhead."]}),"\n",(0,r.jsx)(t.li,{children:"Administration of client and server certificates."}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Remote configuration"})," of sensors via simple APIs (Web UI, REST)."]}),"\n",(0,r.jsxs)(t.li,{children:["Support for ",(0,r.jsx)(t.strong,{children:"Firmware Updates"})," Over The Air (FOTA)."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Scalability"}),", even with thousands of devices."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Intermediate storage"})," for sensor data before further processing in the downstream application."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Data insight and export"})," independent of downstream application via CSV export or REST API."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Integration with LoRaWAN Network Servers"})," like ChirpStack, TTN / TTI, Lotiot, and many more ..."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Unified API for downstream applications"})," across different connectivity technologies on the device side (e.g.\nNB-IoT,\nLoRaWAN, wireless MBUS, LAN)."]}),"\n",(0,r.jsx)(t.li,{children:"Quickly bring IoT applications to market by focusing on the use case and the actual data without having to deal with\nhardware and firmware implementation details or properly secured data transfers from the sensor to the cloud."}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Low hardware requirements"})," for the server of the Lobaro Platform. Small setups can run on the same server next to\nthe\nuse-case specific platform or even an Raspberry PI for embedded use-cases. Bigger setups can be auto scaled in cloud\nenvironments."]}),"\n",(0,r.jsxs)(t.li,{children:["Internal APIs between hardware and Lobaro Platform can be changed, e.g. for firmware extensions, without compromising\na ",(0,r.jsx)(t.strong,{children:"stable API to the downstream system"})," and thus increasing the stability of the end application."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["As one might see, all these functionality require a high level of knowledge about the hardware and how it internally\nworks. ",(0,r.jsx)(t.strong,{children:"Lobaro can only provide support and guarantees that all features of our NB-IoT products are available and\nfunction as expected if the Lobaro Platform is also used as a counterpart."})]}),"\n",(0,r.jsx)(t.p,{children:"If using the Lobaro IoT platform is absolutely not an option many of our NB-IoT products can also be configured to use\nLoRaWAN uplinks which shifts the dependence to the used LoRaWAN network server beside the well-known challenges of\nLoRaWAN networks compared to cellular IoT. We also work on Direct MQTT support for some of our devices to allow direct\nintegrations with a custom broker."})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>s,x:()=>i});var r=o(6540);const n={},a=r.createContext(n);function s(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1e6d8483.68eea00b.js b/assets/js/1e6d8483.68eea00b.js new file mode 100644 index 00000000..5bd3e4b7 --- /dev/null +++ b/assets/js/1e6d8483.68eea00b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5492],{2667:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var s=t(4848),r=t(8453);const a={sidebar_position:1},o="Description",i={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Gateway Solar",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/"},next:{title:"Discontinued Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/"}},d={},c=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,s.jsx)(n.h1,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,s.jsxs)(n.p,{children:["Get started by ",(0,s.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Or ",(0,s.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,s.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,s.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,s.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,s.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,s.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,s.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Open ",(0,s.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,s.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>i});var s=t(6540);const r={},a=s.createContext(r);function o(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1e6d8483.dd9fee76.js b/assets/js/1e6d8483.dd9fee76.js deleted file mode 100644 index 1a3040e5..00000000 --- a/assets/js/1e6d8483.dd9fee76.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5492],{2667:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var s=t(4848),r=t(8453);const a={sidebar_position:1},o="Description",i={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Gateway Solar",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/"},next:{title:"Discontinued Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/"}},d={},c=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,s.jsx)(n.h1,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,s.jsxs)(n.p,{children:["Get started by ",(0,s.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Or ",(0,s.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,s.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,s.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,s.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,s.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,s.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,s.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Open ",(0,s.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,s.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>i});var s=t(6540);const r={},a=s.createContext(r);function o(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/21e5f94e.5fe9e5d3.js b/assets/js/21e5f94e.5fe9e5d3.js new file mode 100644 index 00000000..72ed8358 --- /dev/null +++ b/assets/js/21e5f94e.5fe9e5d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7820],{1325:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var o=s(4848),n=s(8453);const r={sidebar_position:1},i="Liquid Level Sensors",a={id:"products/sensor-gateways/level/index",title:"Liquid Level Sensors",description:"",source:"@site/docs/products/sensor-gateways/level/index.md",sourceDirName:"products/sensor-gateways/level",slug:"/products/sensor-gateways/level/",permalink:"/iot/products/sensor-gateways/level/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/level/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Current Loop",permalink:"/iot/products/sensor-gateways/current-loop/"},next:{title:"Modbus",permalink:"/iot/products/sensor-gateways/modbus/"}},c={},l=[];function d(e){const t={h1:"h1",...(0,n.R)(),...e.components};return(0,o.jsx)(t.h1,{id:"liquid-level-sensors",children:"Liquid Level Sensors"})}function u(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>a});var o=s(6540);const n={},r=o.createContext(n);function i(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/21e5f94e.61c6b161.js b/assets/js/21e5f94e.61c6b161.js deleted file mode 100644 index 6a3f529e..00000000 --- a/assets/js/21e5f94e.61c6b161.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7820],{1325:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var o=s(4848),n=s(8453);const r={sidebar_position:1},i="Liquid Level Sensors",a={id:"products/sensor-gateways/level/index",title:"Liquid Level Sensors",description:"",source:"@site/docs/products/sensor-gateways/level/index.md",sourceDirName:"products/sensor-gateways/level",slug:"/products/sensor-gateways/level/",permalink:"/iot/products/sensor-gateways/level/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/level/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Current Loop",permalink:"/iot/products/sensor-gateways/current-loop/"},next:{title:"Modbus",permalink:"/iot/products/sensor-gateways/modbus/"}},c={},d=[];function u(e){const t={h1:"h1",...(0,n.R)(),...e.components};return(0,o.jsx)(t.h1,{id:"liquid-level-sensors",children:"Liquid Level Sensors"})}function l(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>a});var o=s(6540);const n={},r=o.createContext(n);function i(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2283cc06.0856baa5.js b/assets/js/2283cc06.0856baa5.js deleted file mode 100644 index a3b43230..00000000 --- a/assets/js/2283cc06.0856baa5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[968],{1309:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=t(4848),o=t(8453);const r={sidebar_position:1},a="Configuration",i={id:"products/sensor-gateways/wireless-mbus-g3/manual/cfg",title:"Configuration",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/manual/cfg.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/manual",slug:"/products/sensor-gateways/wireless-mbus-g3/manual/cfg",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/manual/cfg.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/"},next:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow"}},u={},c=[];function l(e){const s={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(6540);const o={},r=n.createContext(o);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2283cc06.9d02fb3b.js b/assets/js/2283cc06.9d02fb3b.js new file mode 100644 index 00000000..29315ebc --- /dev/null +++ b/assets/js/2283cc06.9d02fb3b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[968],{1309:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=t(4848),o=t(8453);const r={sidebar_position:1},a="Configuration",i={id:"products/sensor-gateways/wireless-mbus-g3/manual/cfg",title:"Configuration",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/manual/cfg.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/manual",slug:"/products/sensor-gateways/wireless-mbus-g3/manual/cfg",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/manual/cfg.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/"},next:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow"}},u={},c=[];function l(e){const s={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(6540);const o={},r=n.createContext(o);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/27118f4d.6cb9b48e.js b/assets/js/27118f4d.6cb9b48e.js deleted file mode 100644 index 2ff053a7..00000000 --- a/assets/js/27118f4d.6cb9b48e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5946],{9519:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>a});var t=n(4848),r=n(8453);const i={sidebar_position:0},l="Wireless M-BUS",o={id:"knowledge-base/wireless-mbus",title:"Wireless M-BUS",description:"Some notable things in a block quote!",source:"@site/docs/knowledge-base/wireless-mbus.md",sourceDirName:"knowledge-base",slug:"/knowledge-base/wireless-mbus",permalink:"/iot/knowledge-base/wireless-mbus",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/knowledge-base/wireless-mbus.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"knowledgeBaseSidebar",next:{title:"Modbus",permalink:"/iot/knowledge-base/modbus"}},d={},a=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const s={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"wireless-m-bus",children:"Wireless M-BUS"}),"\n",(0,t.jsx)("div",{className:"note",children:(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsx)(s.p,{children:"Some notable things in a block quote!"}),"\n"]})}),"\n",(0,t.jsx)("div",{children:(0,t.jsxs)("table",{children:[(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Person 1"}),(0,t.jsx)("th",{children:"Person 2"}),(0,t.jsx)("th",{children:"Person 3"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:"Emil"}),(0,t.jsx)("td",{children:"Tobias"}),(0,t.jsx)("td",{children:"Linus"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:"16"}),(0,t.jsx)("td",{children:"14"}),(0,t.jsx)("td",{children:"10"})]})]})}),"\n",(0,t.jsx)(s.h1,{id:"tutorial-intro",children:"Tutorial Intro"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Foo"}),(0,t.jsx)(s.th,{children:"Bar"})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"A"}),(0,t.jsx)(s.td,{children:"B"})]})})]}),"\n",(0,t.jsxs)(s.p,{children:["Let's discover ",(0,t.jsx)(s.strong,{children:"Docusaurus in less than 5 minutes"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(s.p,{children:["Get started by ",(0,t.jsx)(s.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Or ",(0,t.jsx)(s.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(s.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(s.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(s.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(s.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(s.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(s.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(s.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Open ",(0,t.jsx)(s.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(s.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>l,x:()=>o});var t=n(6540);const r={},i=t.createContext(r);function l(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/27118f4d.7120e1e5.js b/assets/js/27118f4d.7120e1e5.js new file mode 100644 index 00000000..030bcdbc --- /dev/null +++ b/assets/js/27118f4d.7120e1e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5946],{9519:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>a});var t=n(4848),r=n(8453);const i={sidebar_position:0},l="Wireless M-BUS",o={id:"knowledge-base/wireless-mbus",title:"Wireless M-BUS",description:"Some notable things in a block quote!",source:"@site/docs/knowledge-base/wireless-mbus.md",sourceDirName:"knowledge-base",slug:"/knowledge-base/wireless-mbus",permalink:"/iot/knowledge-base/wireless-mbus",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/knowledge-base/wireless-mbus.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"allDocSidebar",previous:{title:"Knowledge Base",permalink:"/iot/knowledge-base/"},next:{title:"Modbus",permalink:"/iot/knowledge-base/modbus"}},d={},a=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const s={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"wireless-m-bus",children:"Wireless M-BUS"}),"\n",(0,t.jsx)("div",{className:"note",children:(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsx)(s.p,{children:"Some notable things in a block quote!"}),"\n"]})}),"\n",(0,t.jsx)("div",{children:(0,t.jsxs)("table",{children:[(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Person 1"}),(0,t.jsx)("th",{children:"Person 2"}),(0,t.jsx)("th",{children:"Person 3"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:"Emil"}),(0,t.jsx)("td",{children:"Tobias"}),(0,t.jsx)("td",{children:"Linus"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:"16"}),(0,t.jsx)("td",{children:"14"}),(0,t.jsx)("td",{children:"10"})]})]})}),"\n",(0,t.jsx)(s.h1,{id:"tutorial-intro",children:"Tutorial Intro"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Foo"}),(0,t.jsx)(s.th,{children:"Bar"})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"A"}),(0,t.jsx)(s.td,{children:"B"})]})})]}),"\n",(0,t.jsxs)(s.p,{children:["Let's discover ",(0,t.jsx)(s.strong,{children:"Docusaurus in less than 5 minutes"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(s.p,{children:["Get started by ",(0,t.jsx)(s.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Or ",(0,t.jsx)(s.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(s.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(s.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(s.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(s.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(s.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(s.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(s.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Open ",(0,t.jsx)(s.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(s.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>l,x:()=>o});var t=n(6540);const r={},i=t.createContext(r);function l(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/28ac7599.f88e457f.js b/assets/js/28ac7599.f88e457f.js deleted file mode 100644 index 05df9e27..00000000 --- a/assets/js/28ac7599.f88e457f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2647],{5303:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=t(4848),o=t(8453);const r={sidebar_position:1},a="Operation Manual",i={id:"products/sensor-gateways/wireless-mbus-g3/manual/index",title:"Operation Manual",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/manual/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/manual",slug:"/products/sensor-gateways/wireless-mbus-g3/manual/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/manual/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Wireless M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/"},next:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg"}},u={},c=[];function l(e){const s={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"operation-manual",children:"Operation Manual"}),"\n",(0,n.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(6540);const o={},r=n.createContext(o);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/28ac7599.fc42109f.js b/assets/js/28ac7599.fc42109f.js new file mode 100644 index 00000000..4d66b0c2 --- /dev/null +++ b/assets/js/28ac7599.fc42109f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2647],{5303:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=t(4848),o=t(8453);const r={sidebar_position:1},a="Operation Manual",i={id:"products/sensor-gateways/wireless-mbus-g3/manual/index",title:"Operation Manual",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/manual/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/manual",slug:"/products/sensor-gateways/wireless-mbus-g3/manual/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/manual/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Wireless M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/"},next:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg"}},u={},c=[];function l(e){const s={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"operation-manual",children:"Operation Manual"}),"\n",(0,n.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(6540);const o={},r=n.createContext(o);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c53b313.2e22d807.js b/assets/js/2c53b313.2e22d807.js new file mode 100644 index 00000000..8b305c97 --- /dev/null +++ b/assets/js/2c53b313.2e22d807.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[4867],{8133:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>a});var A=i(4848),t=i(8453);const r={},d="Administration",s={id:"platform/administration/index",title:"Administration",description:"admin",source:"@site/docs/platform/administration/index.md",sourceDirName:"platform/administration",slug:"/platform/administration/",permalink:"/iot/platform/administration/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/index.md",tags:[],version:"current",frontMatter:{},sidebar:"allDocSidebar",previous:{title:"Integrations",permalink:"/iot/platform/integrations/"},next:{title:"Changelog",permalink:"/iot/platform/administration/changelog"}},l={},a=[{value:"Hardware",id:"hardware",level:2},{value:"Bulk Operations",id:"bulk-operations",level:3},{value:"New Hardware",id:"new-hardware",level:3},{value:"Import",id:"import",level:3},{value:"CSV Import File Format",id:"csv-import-file-format",level:4}];function o(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(n.h1,{id:"administration",children:"Administration"}),"\n",(0,A.jsx)(n.admonition,{title:"Required roles",type:"info",children:(0,A.jsx)(n.p,{children:"admin"})}),"\n",(0,A.jsx)(n.p,{children:'Global platform admins have access to the "Configuration" page from the main navigation.'}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.img,{alt:"nav-configuration.png",src:i(5091).A+"",width:"780",height:"90"})}),"\n",(0,A.jsx)(n.p,{children:"The Configuration page gives access to entities independent of an Organisation."}),"\n",(0,A.jsx)(n.h2,{id:"hardware",children:"Hardware"}),"\n",(0,A.jsx)(n.p,{children:"On the hardware page, all devices independent of the organisation can be managed."}),"\n",(0,A.jsx)(n.p,{children:"In the top right corner you can select different actions."}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.img,{alt:"actions.png",src:i(104).A+"",width:"385",height:"36"})}),"\n",(0,A.jsx)(n.h3,{id:"bulk-operations",children:"Bulk Operations"}),"\n",(0,A.jsx)(n.p,{children:"Select one or multiple devices from the list to execute bulk updates like changing of the Organisation or Device Type."}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.img,{alt:"bulk-operations.png",src:i(2354).A+"",width:"1195",height:"296"})}),"\n",(0,A.jsxs)(n.ul,{children:["\n",(0,A.jsx)(n.li,{children:"Select all relevant devices (search box and pagination can be used with out looking the selection)"}),"\n",(0,A.jsx)(n.li,{children:'Click "Bulk Operations"'}),"\n"]}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.img,{alt:"bulk-operations-update.png",src:i(7298).A+"",width:"973",height:"429"})}),"\n",(0,A.jsxs)(n.ul,{children:["\n",(0,A.jsx)(n.li,{children:"A list of devices to update is shown below the form"}),"\n",(0,A.jsx)(n.li,{children:'Select what properties update and click "Bulk Update"'}),"\n"]}),"\n",(0,A.jsx)(n.h3,{id:"new-hardware",children:"New Hardware"}),"\n",(0,A.jsx)(n.p,{children:"Create a new device. Each device needs:"}),"\n",(0,A.jsxs)(n.ul,{children:["\n",(0,A.jsx)(n.li,{children:"Address"}),"\n",(0,A.jsx)(n.li,{children:"Name (optional, default is the Address)"}),"\n",(0,A.jsx)(n.li,{children:'Device Type (optional, default is the "Generic Device")'}),"\n",(0,A.jsx)(n.li,{children:"Organisation (optional)"}),"\n"]}),"\n",(0,A.jsx)(n.h3,{id:"import",children:"Import"}),"\n",(0,A.jsx)(n.p,{children:"Import Hardware from a CSV file."}),"\n",(0,A.jsx)(n.h4,{id:"csv-import-file-format",children:"CSV Import File Format"}),"\n",(0,A.jsxs)(n.ul,{children:["\n",(0,A.jsx)(n.li,{children:"Column names in first row"}),"\n"]}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.strong,{children:"Columns:"})}),"\n",(0,A.jsxs)(n.table,{children:[(0,A.jsx)(n.thead,{children:(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.th,{children:"Column Name"}),(0,A.jsx)(n.th,{children:"Required"}),(0,A.jsx)(n.th,{children:"Type"}),(0,A.jsx)(n.th,{children:"Description"})]})}),(0,A.jsxs)(n.tbody,{children:[(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.td,{children:"address"}),(0,A.jsx)(n.td,{}),(0,A.jsx)(n.td,{children:"string"}),(0,A.jsxs)(n.td,{children:["Globally unique address of the device, e.g. IMEI or DevEUI.",(0,A.jsx)("br",{}),"The address that is used to assign Uplinks to the device."]})]}),(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.td,{children:"name"}),(0,A.jsx)(n.td,{children:"optional"}),(0,A.jsx)(n.td,{children:"string"}),(0,A.jsxs)(n.td,{children:["User friendly name of the device.",(0,A.jsx)("br",{}),"Default: the address of the device."]})]}),(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.td,{children:"serial"}),(0,A.jsx)(n.td,{children:"optional"}),(0,A.jsx)(n.td,{children:"string"}),(0,A.jsxs)(n.td,{children:["Serial number printed on the device.",(0,A.jsx)("br",{}),"For Lobaro devices, the firmware typically has no knowledge of the serial."]})]}),(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.td,{children:"firmware"}),(0,A.jsx)(n.td,{children:"optional"}),(0,A.jsx)(n.td,{children:"string"}),(0,A.jsx)(n.td,{children:"Initial Firmware name and version on the device as user friendly string"})]}),(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.td,{children:"config"}),(0,A.jsxs)(n.td,{children:[(0,A.jsx)(n.strong,{children:"deprecated"}),(0,A.jsx)("br",{}),"use cfg:",(0,A.jsx)(n.code,{children:""})]}),(0,A.jsx)(n.td,{children:"json"}),(0,A.jsxs)(n.td,{children:["A whole config can be imported as JSON object. e.g. ",(0,A.jsx)(n.code,{children:'{"key":"value"}'}),(0,A.jsx)("br",{}),"Warning: this requires a lot of escaping in CSV."]})]}),(0,A.jsxs)(n.tr,{children:[(0,A.jsxs)(n.td,{children:["cfg:",(0,A.jsx)(n.code,{children:""})]}),(0,A.jsx)(n.td,{children:"optional"}),(0,A.jsx)(n.td,{children:"string"}),(0,A.jsxs)(n.td,{children:["Initial config value of the device where ",(0,A.jsx)(n.code,{children:""})," is the technical name of the config value. ",(0,A.jsx)("br",{}),"Multiple of these columns can exist. ",(0,A.jsx)("br",{}),"e.g. ",(0,A.jsx)(n.code,{children:"cfg:DevEUI"})," to specify the config value of the parameter ",(0,A.jsx)(n.code,{children:"DevEUI"}),". ",(0,A.jsx)("br",{}),'Users can export the Initial config values on the "Hardware Activation" page based on the settings in the "Device Type"']})]})]})]}),"\n",(0,A.jsx)(n.p,{children:"There are preferred config values for some device classes. Technically the name can vary, but might need some custom setup inside the device type."}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.strong,{children:"LoRaWAN"})}),"\n",(0,A.jsx)(n.p,{children:"LoRaWAN specific config keys:"}),"\n",(0,A.jsxs)(n.ul,{children:["\n",(0,A.jsx)(n.li,{children:"DevEUI - Unique address of the LoRaWAN Device"}),"\n",(0,A.jsx)(n.li,{children:"JoinEUI - optional JoinEUI or AppEUI of the LoRaWAN device"}),"\n",(0,A.jsx)(n.li,{children:"AppKey - AppKey of the LoRaWAN Device"}),"\n",(0,A.jsx)(n.li,{children:"NwkKey - LoRaWAN 1.1 only"}),"\n"]})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,A.jsx)(n,{...e,children:(0,A.jsx)(o,{...e})}):o(e)}},104:(e,n,i)=>{i.d(n,{A:()=>A});const A="data:image/png;base64,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"},7298:(e,n,i)=>{i.d(n,{A:()=>A});const A=i.p+"assets/images/bulk-operations-update-83cdf35011eae26a53ba60d9539360a6.png"},2354:(e,n,i)=>{i.d(n,{A:()=>A});const A=i.p+"assets/images/bulk-operations-c1fb9b3364eecf3d617070a2f8b998f2.png"},5091:(e,n,i)=>{i.d(n,{A:()=>A});const A="data:image/png;base64,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"},8453:(e,n,i)=>{i.d(n,{R:()=>d,x:()=>s});var A=i(6540);const t={},r=A.createContext(t);function d(e){const n=A.useContext(r);return A.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),A.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c53b313.7607acbe.js b/assets/js/2c53b313.7607acbe.js deleted file mode 100644 index c4ef8e98..00000000 --- a/assets/js/2c53b313.7607acbe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[4867],{8133:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>a});var A=i(4848),t=i(8453);const r={},d="Administration",s={id:"platform/administration/index",title:"Administration",description:"admin",source:"@site/docs/platform/administration/index.md",sourceDirName:"platform/administration",slug:"/platform/administration/",permalink:"/iot/platform/administration/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/index.md",tags:[],version:"current",frontMatter:{},sidebar:"cloudSidebar",previous:{title:"Integrations",permalink:"/iot/platform/integrations/"},next:{title:"Changelog",permalink:"/iot/platform/administration/changelog"}},l={},a=[{value:"Hardware",id:"hardware",level:2},{value:"Bulk Operations",id:"bulk-operations",level:3},{value:"New Hardware",id:"new-hardware",level:3},{value:"Import",id:"import",level:3},{value:"CSV Import File Format",id:"csv-import-file-format",level:4}];function o(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(n.h1,{id:"administration",children:"Administration"}),"\n",(0,A.jsx)(n.admonition,{title:"Required roles",type:"info",children:(0,A.jsx)(n.p,{children:"admin"})}),"\n",(0,A.jsx)(n.p,{children:'Global platform admins have access to the "Configuration" page from the main navigation.'}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.img,{alt:"nav-configuration.png",src:i(5091).A+"",width:"780",height:"90"})}),"\n",(0,A.jsx)(n.p,{children:"The Configuration page gives access to entities independent of an Organisation."}),"\n",(0,A.jsx)(n.h2,{id:"hardware",children:"Hardware"}),"\n",(0,A.jsx)(n.p,{children:"On the hardware page, all devices independent of the organisation can be managed."}),"\n",(0,A.jsx)(n.p,{children:"In the top right corner you can select different actions."}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.img,{alt:"actions.png",src:i(104).A+"",width:"385",height:"36"})}),"\n",(0,A.jsx)(n.h3,{id:"bulk-operations",children:"Bulk Operations"}),"\n",(0,A.jsx)(n.p,{children:"Select one or multiple devices from the list to execute bulk updates like changing of the Organisation or Device Type."}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.img,{alt:"bulk-operations.png",src:i(2354).A+"",width:"1195",height:"296"})}),"\n",(0,A.jsxs)(n.ul,{children:["\n",(0,A.jsx)(n.li,{children:"Select all relevant devices (search box and pagination can be used with out looking the selection)"}),"\n",(0,A.jsx)(n.li,{children:'Click "Bulk Operations"'}),"\n"]}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.img,{alt:"bulk-operations-update.png",src:i(7298).A+"",width:"973",height:"429"})}),"\n",(0,A.jsxs)(n.ul,{children:["\n",(0,A.jsx)(n.li,{children:"A list of devices to update is shown below the form"}),"\n",(0,A.jsx)(n.li,{children:'Select what properties update and click "Bulk Update"'}),"\n"]}),"\n",(0,A.jsx)(n.h3,{id:"new-hardware",children:"New Hardware"}),"\n",(0,A.jsx)(n.p,{children:"Create a new device. Each device needs:"}),"\n",(0,A.jsxs)(n.ul,{children:["\n",(0,A.jsx)(n.li,{children:"Address"}),"\n",(0,A.jsx)(n.li,{children:"Name (optional, default is the Address)"}),"\n",(0,A.jsx)(n.li,{children:'Device Type (optional, default is the "Generic Device")'}),"\n",(0,A.jsx)(n.li,{children:"Organisation (optional)"}),"\n"]}),"\n",(0,A.jsx)(n.h3,{id:"import",children:"Import"}),"\n",(0,A.jsx)(n.p,{children:"Import Hardware from a CSV file."}),"\n",(0,A.jsx)(n.h4,{id:"csv-import-file-format",children:"CSV Import File Format"}),"\n",(0,A.jsxs)(n.ul,{children:["\n",(0,A.jsx)(n.li,{children:"Column names in first row"}),"\n"]}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.strong,{children:"Columns:"})}),"\n",(0,A.jsxs)(n.table,{children:[(0,A.jsx)(n.thead,{children:(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.th,{children:"Column Name"}),(0,A.jsx)(n.th,{children:"Required"}),(0,A.jsx)(n.th,{children:"Type"}),(0,A.jsx)(n.th,{children:"Description"})]})}),(0,A.jsxs)(n.tbody,{children:[(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.td,{children:"address"}),(0,A.jsx)(n.td,{}),(0,A.jsx)(n.td,{children:"string"}),(0,A.jsxs)(n.td,{children:["Globally unique address of the device, e.g. IMEI or DevEUI.",(0,A.jsx)("br",{}),"The address that is used to assign Uplinks to the device."]})]}),(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.td,{children:"name"}),(0,A.jsx)(n.td,{children:"optional"}),(0,A.jsx)(n.td,{children:"string"}),(0,A.jsxs)(n.td,{children:["User friendly name of the device.",(0,A.jsx)("br",{}),"Default: the address of the device."]})]}),(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.td,{children:"serial"}),(0,A.jsx)(n.td,{children:"optional"}),(0,A.jsx)(n.td,{children:"string"}),(0,A.jsxs)(n.td,{children:["Serial number printed on the device.",(0,A.jsx)("br",{}),"For Lobaro devices, the firmware typically has no knowledge of the serial."]})]}),(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.td,{children:"firmware"}),(0,A.jsx)(n.td,{children:"optional"}),(0,A.jsx)(n.td,{children:"string"}),(0,A.jsx)(n.td,{children:"Initial Firmware name and version on the device as user friendly string"})]}),(0,A.jsxs)(n.tr,{children:[(0,A.jsx)(n.td,{children:"config"}),(0,A.jsxs)(n.td,{children:[(0,A.jsx)(n.strong,{children:"deprecated"}),(0,A.jsx)("br",{}),"use cfg:",(0,A.jsx)(n.code,{children:""})]}),(0,A.jsx)(n.td,{children:"json"}),(0,A.jsxs)(n.td,{children:["A whole config can be imported as JSON object. e.g. ",(0,A.jsx)(n.code,{children:'{"key":"value"}'}),(0,A.jsx)("br",{}),"Warning: this requires a lot of escaping in CSV."]})]}),(0,A.jsxs)(n.tr,{children:[(0,A.jsxs)(n.td,{children:["cfg:",(0,A.jsx)(n.code,{children:""})]}),(0,A.jsx)(n.td,{children:"optional"}),(0,A.jsx)(n.td,{children:"string"}),(0,A.jsxs)(n.td,{children:["Initial config value of the device where ",(0,A.jsx)(n.code,{children:""})," is the technical name of the config value. ",(0,A.jsx)("br",{}),"Multiple of these columns can exist. ",(0,A.jsx)("br",{}),"e.g. ",(0,A.jsx)(n.code,{children:"cfg:DevEUI"})," to specify the config value of the parameter ",(0,A.jsx)(n.code,{children:"DevEUI"}),". ",(0,A.jsx)("br",{}),'Users can export the Initial config values on the "Hardware Activation" page based on the settings in the "Device Type"']})]})]})]}),"\n",(0,A.jsx)(n.p,{children:"There are preferred config values for some device classes. Technically the name can vary, but might need some custom setup inside the device type."}),"\n",(0,A.jsx)(n.p,{children:(0,A.jsx)(n.strong,{children:"LoRaWAN"})}),"\n",(0,A.jsx)(n.p,{children:"LoRaWAN specific config keys:"}),"\n",(0,A.jsxs)(n.ul,{children:["\n",(0,A.jsx)(n.li,{children:"DevEUI - Unique address of the LoRaWAN Device"}),"\n",(0,A.jsx)(n.li,{children:"JoinEUI - optional JoinEUI or AppEUI of the LoRaWAN device"}),"\n",(0,A.jsx)(n.li,{children:"AppKey - AppKey of the LoRaWAN Device"}),"\n",(0,A.jsx)(n.li,{children:"NwkKey - LoRaWAN 1.1 only"}),"\n"]})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,A.jsx)(n,{...e,children:(0,A.jsx)(o,{...e})}):o(e)}},104:(e,n,i)=>{i.d(n,{A:()=>A});const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYEAAAAkCAIAAADgnRGaAAAHFUlEQVR4Xu2dz4obRxDGvW+QvEEeIXmD5A0c9gXil/AxyUGQwx7so2/ZgDYQX3wPAgcCBpNABLKEQawtk82KLGGFyeJgMEyqu/pPdXWPNNMa7cxI9TGEUU9PT099Vb9pjRz2zr8ikUjUnu7wBpFIJLpFeQZdXFzMZrPJZPJcJBI1pPF4zJsOW0AY4AzQhjMImqbT6eXlZSHqj8BR3iTqmMSjWMAZoI3DkGEQkEkA1DtJfndf4lFS+K0rYBAskHgvUecl+d19iUdlAuYEDJJI9VHiWvclHpUJIiMM6r3Ete5LPCqTMGgfJK51X+JRmYRB+yBxrfsSj8okDNoHiWvdl3hUpp0z6On5zenvK94qalSNuyZqXI149Mdf/8HGW3uu3TII4nV0fwLbvccX/JioOTXi2t3TN7DxVlFD2t4jqKaPv5nBtmcY2iGDnrx4u3r34auf/kQMwUfeI09Xi+P782dqbzm4Pzu74sdblprebc+qEdc+f/QKNt7ae0GSYLa0rC09QgBhKe0ZhnbFoO9/u4ZgffZwjhj66OvZ6+v3vJPX6uxEBRe349Ha7261GKQ6u5E3dc7WZH50sljy1ttTI65lMGg5mvGoQsAbCEUEjvxho6Fa0jYeIYCgiDCTYac6hsCjDQXViHxV1tZOGIQAwg0xtBZAhWaQS+VNZKnOIEAD7aB5NNjFvwM/YAYdn8yCe8+HBVUEjvxho6Fa0jYeAXRgA+igR7CDGOL9UjpEBlEAIbM3AagIGaTWREiKZ0OCDKjzoU7CFIOg5xEPQYpQDhY4iIKUnieOrKWHCpZj0HI8WgygUZ/rOuBHvRYwLWq21AyyCnOjqf7DpR3EzzC+bnVt71qRzaDRSsfHzjmAxVIFzd8me9I4c2NMRC1kWBJwGuf5mW53mWMdwaE2XZo4ZQ6Vj5lhULGdR09evMVVj/MIPlZ8ueEYpBNvYb5wqGDaLx/Or/KiIDEP1woj1fn4x5f2aE5wGmZQDKBqK0aSIiTbKjJIBSh+SKbXJhZMmHMmysoM4pNvJMnnSmI5iM4KrhVMz83fj4Z2+n0HMmJ5XeW5dvf0zRePXrkNLaMtX/6w4RW1zW+Ce2+fv2UXE/9MvloMTuy+c9ZrDYNWZ0OfHiQlOOVx33m3/tLL0dzMX1Wgp1JqTHJfdZTnEVP2cwJ3yMPA0YSkcUlR+JiYPj69vXG+vbaaZFAugAr2PsgZXIlBisSpm09kduFhx0JmIBIsnZx5wXOeyKd1ikEcKz7dSbubRpqYVZXnGjAIcxo3DD5t2fgzWSICDhbBHdmw20Y4cTAyPdU+L2m3gCJbHJ9EShQmK/z61+KsxqUdg9Jj+ruuozyPmLZlkE289H66KDhzbVWGce4Cg2BlmAugIlyl+5qvwKCAWYHSVZ3MMFc5UerrKzIG6eeJ6cArEIeyDAoy1RZnyCb/wDfDJua8WdmuUW2T34WLEmVQGEybuHP9zYj+lyIDtWYdFI7MU6KIznUf11+aWh9nSDoxainDI6gpWIqu3n1wLcwjOAQdnp7fuJZY+QwyMecG2QE7xiDADYTj0wcmOWoCqGAMcripwKDZ2WRR8lt4GCMUfVzTkJnBo9TXogxi5q1nUJCpdv5lDDKf2VnVlOca05YM8nY4BqVuRHtqvs+a/QR2eVgCtFEY8ZQouO/kUPml6Sn20nzMRGLUUoZH3/78N1QTRQzzCA5BB+jmWmLlM8iEtyfroE++e3nv8QViqD6AirJ1EImUfhDxSNkoqAdjhBs8nbbTbmoQRxY1OEZZvT6IKocyiOyHX5gjBuElrHneyPUMCoaqrDzXmLZmkF2h+MJOLFHVKeR1jN8PFIXFMohGz5sVFgA1Ue3bQ6WXpqerW4gZlE6MWsrwKGbQ6+v39BeeHTAoURS6jmwo4urj7bXVAIMAPbj8QQzVB1DB3geFJWqXx4mHno+CDlMi401VuEFcux4Ef/U4Cl7m05mYwSmDyJRmg6GrH3OWmgA1Q5uKo7m5JRmE8+eTrKwM12I1wCCs1QDHNphBI110pFwrZxA1aDCMUwJF+pjfxewgJZf28R/OU+ugIpkYtZThETLo4a///HJ+k9zg0FHDDEoWRTI/QwYZ3KffnK5XAwxyb4JgEZQFoDbEM6zfynAtlvy/GjtVhkcPNGI2btCNn5mnloqiAQbhP1Wgb856oJbCvSNluCa6ZWV4BDUFfIFlzpoNOjRWei0VRQMM6qVaCveOdCiu9Vk98KilojhUBu2XxLXuSzwqkzBoHySudV/iUZmEQfsgca37Eo/KJAzaB4lr3Zd4VCbOIPkbh32U5Hf3JR6Vif+NQ/lbz32U5Hf3JR4llfhbz9A0nU4FQ/2S5Hf3JR7FAs4AbYA5AYMQQ0AmWCA9F4lEDWk8HvOmwxYQBjjjABQwSCQSiW5fwiCRSNSm/gd2vTUp9vdcOgAAAABJRU5ErkJggg=="},7298:(e,n,i)=>{i.d(n,{A:()=>A});const A=i.p+"assets/images/bulk-operations-update-83cdf35011eae26a53ba60d9539360a6.png"},2354:(e,n,i)=>{i.d(n,{A:()=>A});const A=i.p+"assets/images/bulk-operations-c1fb9b3364eecf3d617070a2f8b998f2.png"},5091:(e,n,i)=>{i.d(n,{A:()=>A});const A="data:image/png;base64,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"},8453:(e,n,i)=>{i.d(n,{R:()=>d,x:()=>s});var A=i(6540);const t={},r=A.createContext(t);function d(e){const n=A.useContext(r);return A.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),A.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3249a05e.1fded185.js b/assets/js/3249a05e.1fded185.js deleted file mode 100644 index 6f2590ef..00000000 --- a/assets/js/3249a05e.1fded185.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5588],{4138:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var n=i(4848),r=i(8453);const l={sidebar_position:2,displayed_sidebar:"configurationSidebar",title:"MBUS Reception Filtering"},s="MBUS Reception Filtering",a={id:"configuration/meter-reception-filter-config",title:"MBUS Reception Filtering",description:"Lobaro firmwares that can receive (wireless) M-BUS have (optional) common filter configuration parameter, that can limit, which telegrams are",source:"@site/docs/configuration/meter-reception-filter-config.md",sourceDirName:"configuration",slug:"/configuration/meter-reception-filter-config",permalink:"/iot/configuration/meter-reception-filter-config",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/meter-reception-filter-config.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,displayed_sidebar:"configurationSidebar",title:"MBUS Reception Filtering"},sidebar:"configurationSidebar",previous:{title:"Lobaro Config Tool",permalink:"/iot/configuration/lobaro-config-tool"},next:{title:"LoRaWAN Downlink Config",permalink:"/iot/configuration/lorawan-downlink-config"}},o={},d=[{value:"Manufacturer filter",id:"manufacturer-filter",level:2},{value:"Examples for M-Field Codes",id:"examples-for-m-field-codes",level:3},{value:"Example for an mFilter whitelist",id:"example-for-an-mfilter-whitelist",level:3},{value:"Example for an mFilter blacklist:",id:"example-for-an-mfilter-blacklist",level:3},{value:"Device Type Filter",id:"device-type-filter",level:2},{value:"Examples for Device Type Codes",id:"examples-for-device-type-codes",level:3},{value:"Example for an typFilter whitelist",id:"example-for-an-typfilter-whitelist",level:3},{value:"Example for an typFilter blacklist:",id:"example-for-an-typfilter-blacklist",level:3},{value:"Device ID Filter",id:"device-id-filter",level:2},{value:"Example for an devFilter whitelist",id:"example-for-an-devfilter-whitelist",level:3},{value:"Example for an devFilter blacklist:",id:"example-for-an-devfilter-blacklist",level:3},{value:"CI Filter",id:"ci-filter",level:2},{value:"Telegrams with multiple layers",id:"telegrams-with-multiple-layers",level:2},{value:"Filtering Sensus RF (X-mode)",id:"filtering-sensus-rf-x-mode",level:2},{value:"Filtering M\xfcller Funk (U-mode)",id:"filtering-m\xfcller-funk-u-mode",level:2},{value:"Filtering Strategies",id:"filtering-strategies",level:2},{value:"Filter fine tuning using maxTelegrams",id:"filter-fine-tuning-using-maxtelegrams",level:3}];function c(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"mbus-reception-filtering",children:"MBUS Reception Filtering"}),"\n",(0,n.jsx)(t.p,{children:"Lobaro firmwares that can receive (wireless) M-BUS have (optional) common filter configuration parameter, that can limit, which telegrams are\nprocessed by it. If\nfiltering is used, any telegram is checked against the filters immediately after it has been received. Only if the\ntelegram fits the criteria defined by all filters is it saved to the internal store and will be uploaded. All telegrams\nthat don't fit will be dropped and not processed further. This can be important to save bandwidth and battery life of a\ndevice. In many areas there will be many wMBus devices that send telegrams you are not interested in."}),"\n",(0,n.jsx)(t.p,{children:"There are four 4 common filter configuration parameter that are used in products / firmware with (wireless) MBUS collection abilities. These four filters check different aspects of a\ntelegram before storing it internally for later upload:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"mFilter"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Manufacturer filter \u2013 filters by the 3-letter manufacturer code that is present in every telegram (e.g. LOB for\nLobaro GmbH)."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"typFilter"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Device Type filter \u2013 filters by the 2-hex-digit code defining the nature of the sending device (e.g. 07 for water\nmeters)."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"devFilter"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Device filter \u2013 filters by the 8-digit ID, that is mandatory for each sending device (e.g. 87654321)."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"ciFilter"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"CI-Field filter \u2013 filters by the 2-hex-digit CI-Field present in every telegram."}),"\n",(0,n.jsx)(t.li,{children:"That is a technical code describing the purpose of a telegram (e.g. 8a)."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Each filter only checks for a single field of information in a telegram. If a filter is left blank, no filtering is done\nfor that field. So if you for example leave mFilter blank, there will be no filtering over the manufacturer of the\ndevice. Each filter is processed independently."}),"\n",(0,n.jsxs)(t.p,{children:['A filter is a simple whitelist for its field. If a telegram\'s value is listed in the filter, the telegram will be\ncollected. If not, it will be dropped. Entries in the list are separated by a single comma "," (no spaces!). If you add\na single exclamation\nmark "',(0,n.jsx)(t.code,{children:"!"}),'" in front of the list, the complete list will be treated as a blacklist.']}),"\n",(0,n.jsx)(t.h2,{id:"manufacturer-filter",children:"Manufacturer filter"}),"\n",(0,n.jsxs)(t.p,{children:["Each wMBus telegram has the manufacturer of the sending meter encoded as a 3-letter code assigned by the ",(0,n.jsx)(t.a,{href:"https://www.dlms.com/home",children:"DLMS User\nAssociation"}),". On their site you can find the complete list\nof ",(0,n.jsx)(t.a,{href:"https://www.dlms.com/flag-id-directory/",children:"manufacturer IDs"}),". The field in the telegram that holds this\ninformation is called M-Field. The M-Field for Lobaro is ",(0,n.jsx)(t.code,{children:"LOB"}),"."]}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsx)(t.p,{children:"Entries in this filter must be exactly 3 letters long. The case is ignored."})}),"\n",(0,n.jsx)(t.h3,{id:"examples-for-m-field-codes",children:"Examples for M-Field Codes"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"M-Code"}),(0,n.jsx)(t.th,{children:"Company"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"LOB"}),(0,n.jsx)(t.td,{children:"Lobaro GmbH, Hamburg, Germany"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"DME"}),(0,n.jsx)(t.td,{children:"Diehl Metering, Ansbach, Germany"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"QDS"}),(0,n.jsx)(t.td,{children:"Qundis GmbH, Erfurt, Germany"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"ARD"}),(0,n.jsx)(t.td,{children:"Arad Group Ltd, Dalia, Israel"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"SEN"}),(0,n.jsx)(t.td,{children:"Sensus Metering Systems, Ludwigshafen, Germany"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"SON"}),(0,n.jsx)(t.td,{children:"Sontex SA, Sonceboz, Switzerland"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"ITW"}),(0,n.jsx)(t.td,{children:"ITRON (Water), Issy-les-Moulineaux, France"})]})]})]}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-mfilter-whitelist",children:["Example for an ",(0,n.jsx)(t.code,{children:"mFilter"})," whitelist"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"mFilter"})," : ",(0,n.jsx)(t.code,{children:"SEN,ITW,DME"})," will collect only telegrams from meters by Sensus Metering, Itron (Water), and Diehl Metering.\nAll other\ntelegrams will be dropped."]}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-mfilter-blacklist",children:["Example for an ",(0,n.jsx)(t.code,{children:"mFilter"})," blacklist:"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"mFilter"})," : ",(0,n.jsx)(t.code,{children:"!SEN,ITW,DME"})," will drop any telegram from meters by Sensus Metering, Itron (Water), or Diehl Metering. Any\nother\nmanufacturer will be stored and uploaded."]}),"\n",(0,n.jsx)(t.h2,{id:"device-type-filter",children:"Device Type Filter"}),"\n",(0,n.jsx)(t.p,{children:"Each wMBus device is of a type (e.g. water meter, heat cost meter). The type is encoded as a 2-hex-digit number. The\nentries must be exactly 2 hex digits long, case is ignored."}),"\n",(0,n.jsx)(t.h3,{id:"examples-for-device-type-codes",children:"Examples for Device Type Codes"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-json",metastring:'title="Wireless M-BUS Device Codes (hex)"',children:'"00": "Other",\n"01": "Oil",\n"02": "Electricity",\n"03": "Gas",\n"04": "Heat",\n"05": "Steam",\n"06": "Warm Water", // 30 - 90\xb0C\n"07": "Water",\n"08": "Heat Cost",\n"09": "Compressed Air",\n"0A": "Cooling load meter (outlet)",\n"0B": "Cooling load meter (inlet)",\n"0C": "Heat (inlet)",\n"0D": "Heat / Cooling load meter",\n"0E": "Bus / System component",\n"0F": "Unknown",\n"10": "consumption meter",\n"11": "consumption meter",\n"12": "consumption meter",\n"13": "consumption meter",\n"14": "Calorific value",\n"15": "Hot Water", // >= 90\xb0C\n"16": "Cold Water",\n"17": "Dual Water meter", // Hot and Cold\n"18": "Pressure",\n"19": "A/D Converter",\n"1A": "Smoke detector",\n"1B": "Room", // e.g. temp, humidity\n"1C": "Gas detector",\n"1D": "Sensor",\n"1E": "Sensor",\n"1F": "Sensor",\n"20": "Breaker (electricity)",\n"21": "Valve (gas or water)",\n"22": "Switching device",\n"23": "Switching device",\n"24": "Switching device",\n"25": "Customer unit (display device)",\n"26": "Customer units",\n"27": "Customer units",\n"29": "Garbage",\n"2A": "Carbon dioxide",\n"30": "system device",\n"31": "Communication controller",\n"32": "Unidirectional repeater",\n"33": "Bidirectional repeater",\n"34": "system device",\n"35": "system device",\n"36": "Radio converter (system side)",\n"37": "Radio converter (meter side)"\n'})}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsx)(t.p,{children:"Usually the actual used device code that a specific meter uses can be found in its manual."})}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-typfilter-whitelist",children:["Example for an ",(0,n.jsx)(t.code,{children:"typFilter"})," whitelist"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"typFilter"})," = ",(0,n.jsx)(t.code,{children:"04"})]}),"\n",(0,n.jsxs)(t.p,{children:["Will receive only heat meters (",(0,n.jsx)(t.code,{children:"04"}),") telegrams."]}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-typfilter-blacklist",children:["Example for an ",(0,n.jsx)(t.code,{children:"typFilter"})," blacklist:"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"typFilter"})," = ",(0,n.jsx)(t.code,{children:"!08,07,F0,06,16,15,32,1A,80"})]}),"\n",(0,n.jsxs)(t.p,{children:["Will ",(0,n.jsx)(t.strong,{children:"not"})," receive any of the listed meter types."]}),"\n",(0,n.jsx)(t.h2,{id:"device-id-filter",children:"Device ID Filter"}),"\n",(0,n.jsxs)(t.p,{children:["Each wMBus device has an ",(0,n.jsx)(t.strong,{children:"8-digit device ID"})," or Address. This ID is normally printed on the device. The combination of\nManufacturer Code and Device ID should be globally unique. This is the most specific filter and can be used to tune the\nGateway to only collect telegram from individual devices. The amount of possible meters in the list depends is product\ndependend and ranges from 500 to 2.500 IDs, please check the actual product documentation or ask Lobaro."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"IDs for wireless M-BUS can omit leading zeros and are 1-8 digit long numbers."}),"\n",(0,n.jsx)(t.li,{children:"This filter also accepts 11-digit IDs for filtering Sensus-RF telegrams in X-mode."}),"\n"]}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsx)(t.p,{children:"The number of telegrams uploaded can be higher than the number of IDs in the whitelist, because some meters send out\nmultiple different telegrams."})}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-devfilter-whitelist",children:["Example for an ",(0,n.jsx)(t.code,{children:"devFilter"})," whitelist"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"devFilter"})," = ",(0,n.jsx)(t.code,{children:"88009035,13456035,56268931"})]}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-devfilter-blacklist",children:["Example for an ",(0,n.jsx)(t.code,{children:"devFilter"})," blacklist:"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"devFilter"})," = ",(0,n.jsx)(t.code,{children:"!88009035,13456035,56268931"})]}),"\n",(0,n.jsx)(t.h2,{id:"ci-filter",children:"CI Filter"}),"\n",(0,n.jsx)(t.p,{children:"The CI-Field is a 2-hex-digit number that is used to encode type and purpose of a telegram. Some meters send multiple\ndifferent types of telegrams that can be identified by this field. Entries in this list must be exactly 2 hex digits\nlong, case is ignored."}),"\n",(0,n.jsx)(t.h2,{id:"telegrams-with-multiple-layers",children:"Telegrams with multiple layers"}),"\n",(0,n.jsx)(t.p,{children:"wMBus telegrams can have multiple headers in different layers. This can be the case if multiple devices are involved in\ncreating the telegram, because it is read from the actual meter by an attached device that sends it out. Telegrams with\nmultiple headers can have multiple different manufacturer codes, device types, and device IDs. These telegrams are\naccepted by a whitelist filter, if at least one of the values in the telegram is present in the whitelist. It will be\ndropped by a blacklist filter if at least one of the values from the telegram is present in the blacklist."}),"\n",(0,n.jsx)(t.h2,{id:"filtering-sensus-rf-x-mode",children:"Filtering Sensus RF (X-mode)"}),"\n",(0,n.jsxs)(t.p,{children:["X-mode is a special listening mode of the Gateway, that collects proprietary telegrams from meters by Sensus/Xylem. *\n",(0,n.jsx)(t.em,{children:"Only\nthe devFilter will be used on X-mode telegrams"}),"*. The IDs used for Sensus-RF meters are 11 digit long and written on the\nmeter in a format with dashes, like this: 1010-012-4411. To use the device filter for X-mode, add the meter IDs to the\nlist in devFilter without the dashes. Sensus-RF IDs must be entered using exactly 11 digits, e.g. 10100124411."]}),"\n",(0,n.jsx)(t.p,{children:"If the a single device uses X-mode together with any other mode (C/T, S, U), the devFilter is used for both. Any ID that\nhas 11 digits will be used for X-mode only. IDs with 1-8 digits will be used for all the other modes, but not for\nX-mode. If there are only 11-digit IDs in devFilter, it will be blank (= no device filter) for modes C/T, S, and U. If\nthere are only 1-to-8-digit IDs in devFilter, it will be blank (= no device filter) for X-mode."}),"\n",(0,n.jsx)(t.h2,{id:"filtering-m\xfcller-funk-u-mode",children:"Filtering M\xfcller Funk (U-mode)"}),"\n",(0,n.jsxs)(t.p,{children:["U-Mode is a special listening mode of the Gateway, that collects proprietary telegrams from meters by M\xfcller-electronic\nGmbH. ",(0,n.jsx)(t.strong,{children:"Only the devFilter will be used on U-mode telegrams, the other filters will be ignored."})," Device IDs for M\xfcller\nFunk\nhave the same format as in wMBus: 8 digits. When U-mode is used on a device that also uses C/T-mode or S-mode, put the\nIDs for both modes in the devFilter list. The IDs in the list will be used for both modes."]}),"\n",(0,n.jsx)(t.h2,{id:"filtering-strategies",children:"Filtering Strategies"}),"\n",(0,n.jsx)(t.p,{children:"There is no all-purpose-strategy for filtering. What is best for you will depend on your use cases."}),"\n",(0,n.jsx)(t.p,{children:"Setting an explicit device list for each of your Gateways will lead to the most efficient use of battery and bandwidth.\nBut it comes with huge administrative overload, as each Gateway will need an individually composed list. When new meters\nare installed, the list must also be updated."}),"\n",(0,n.jsxs)(t.p,{children:["For bigger role-outs it might be easier to work with device type filters. If you are only interested in water meters, a\n",(0,n.jsx)(t.code,{children:"typFilter"}),' set to "06,07,15,16,17" might be a sufficient setting for your bridges; it will filter out any head cost\nmeters and smoke detectors. Unintentionally received water meters can simply be ignored in the backend. A combination of\n',(0,n.jsx)(t.code,{children:"typFilter"})," and ",(0,n.jsx)(t.code,{children:"mFilter"})," will often reduce the number of unwanted telegrams sufficiently."]}),"\n",(0,n.jsx)(t.p,{children:"Individual tuning can be done by initially installing a gateway with no filters configured. After the first uploads, the\nwanted telegrams can be identified in the backend, and filters can then be created and sent to the gateway way remote\nconfiguration downlink."}),"\n",(0,n.jsx)(t.p,{children:"If the Gateway uploads telegrams that you do not want, you can put each unwanted meter on the device blacklist via\nremote configuration."}),"\n",(0,n.jsxs)(t.h3,{id:"filter-fine-tuning-using-maxtelegrams",children:["Filter fine tuning using ",(0,n.jsx)(t.code,{children:"maxTelegrams"})]}),"\n",(0,n.jsxs)(t.p,{children:["The reception time the Gateway for collecting wMBus telegrams can be minimised by a combination of filters and\nmaxTelegrams. If maxTelegrams is set to a number different than 0, the Gateway will stop collection and start uploading\nas soon as that many telegrams are in the store. Set the the IDs of all wanted Meters in devFilter and\nset ",(0,n.jsx)(t.code,{children:"maxTelegrams"}),"\nto the number of telegrams you expect. Be aware, that some devices will send out multiple different telegrams. Set\nmaxTelegrams accordingly."]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>s,x:()=>a});var n=i(6540);const r={},l=n.createContext(r);function s(e){const t=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3249a05e.af96e436.js b/assets/js/3249a05e.af96e436.js new file mode 100644 index 00000000..10e27850 --- /dev/null +++ b/assets/js/3249a05e.af96e436.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5588],{4138:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var n=i(4848),l=i(8453);const r={sidebar_position:2,title:"MBUS Reception Filtering"},s="MBUS Reception Filtering",a={id:"configuration/meter-reception-filter-config",title:"MBUS Reception Filtering",description:"Lobaro firmwares that can receive (wireless) M-BUS have (optional) common filter configuration parameter, that can limit, which telegrams are",source:"@site/docs/configuration/meter-reception-filter-config.md",sourceDirName:"configuration",slug:"/configuration/meter-reception-filter-config",permalink:"/iot/configuration/meter-reception-filter-config",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/meter-reception-filter-config.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"MBUS Reception Filtering"},sidebar:"allDocSidebar",previous:{title:"Lobaro Config Tool",permalink:"/iot/configuration/lobaro-config-tool"},next:{title:"LoRaWAN Downlink Config",permalink:"/iot/configuration/lorawan-downlink-config"}},o={},d=[{value:"Manufacturer filter",id:"manufacturer-filter",level:2},{value:"Examples for M-Field Codes",id:"examples-for-m-field-codes",level:3},{value:"Example for an mFilter whitelist",id:"example-for-an-mfilter-whitelist",level:3},{value:"Example for an mFilter blacklist:",id:"example-for-an-mfilter-blacklist",level:3},{value:"Device Type Filter",id:"device-type-filter",level:2},{value:"Examples for Device Type Codes",id:"examples-for-device-type-codes",level:3},{value:"Example for an typFilter whitelist",id:"example-for-an-typfilter-whitelist",level:3},{value:"Example for an typFilter blacklist:",id:"example-for-an-typfilter-blacklist",level:3},{value:"Device ID Filter",id:"device-id-filter",level:2},{value:"Example for an devFilter whitelist",id:"example-for-an-devfilter-whitelist",level:3},{value:"Example for an devFilter blacklist:",id:"example-for-an-devfilter-blacklist",level:3},{value:"CI Filter",id:"ci-filter",level:2},{value:"Telegrams with multiple layers",id:"telegrams-with-multiple-layers",level:2},{value:"Filtering Sensus RF (X-mode)",id:"filtering-sensus-rf-x-mode",level:2},{value:"Filtering M\xfcller Funk (U-mode)",id:"filtering-m\xfcller-funk-u-mode",level:2},{value:"Filtering Strategies",id:"filtering-strategies",level:2},{value:"Filter fine tuning using maxTelegrams",id:"filter-fine-tuning-using-maxtelegrams",level:3}];function c(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"mbus-reception-filtering",children:"MBUS Reception Filtering"}),"\n",(0,n.jsx)(t.p,{children:"Lobaro firmwares that can receive (wireless) M-BUS have (optional) common filter configuration parameter, that can limit, which telegrams are\nprocessed by it. If\nfiltering is used, any telegram is checked against the filters immediately after it has been received. Only if the\ntelegram fits the criteria defined by all filters is it saved to the internal store and will be uploaded. All telegrams\nthat don't fit will be dropped and not processed further. This can be important to save bandwidth and battery life of a\ndevice. In many areas there will be many wMBus devices that send telegrams you are not interested in."}),"\n",(0,n.jsx)(t.p,{children:"There are four 4 common filter configuration parameter that are used in products / firmware with (wireless) MBUS collection abilities. These four filters check different aspects of a\ntelegram before storing it internally for later upload:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"mFilter"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Manufacturer filter \u2013 filters by the 3-letter manufacturer code that is present in every telegram (e.g. LOB for\nLobaro GmbH)."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"typFilter"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Device Type filter \u2013 filters by the 2-hex-digit code defining the nature of the sending device (e.g. 07 for water\nmeters)."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"devFilter"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Device filter \u2013 filters by the 8-digit ID, that is mandatory for each sending device (e.g. 87654321)."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"ciFilter"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"CI-Field filter \u2013 filters by the 2-hex-digit CI-Field present in every telegram."}),"\n",(0,n.jsx)(t.li,{children:"That is a technical code describing the purpose of a telegram (e.g. 8a)."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Each filter only checks for a single field of information in a telegram. If a filter is left blank, no filtering is done\nfor that field. So if you for example leave mFilter blank, there will be no filtering over the manufacturer of the\ndevice. Each filter is processed independently."}),"\n",(0,n.jsxs)(t.p,{children:['A filter is a simple whitelist for its field. If a telegram\'s value is listed in the filter, the telegram will be\ncollected. If not, it will be dropped. Entries in the list are separated by a single comma "," (no spaces!). If you add\na single exclamation\nmark "',(0,n.jsx)(t.code,{children:"!"}),'" in front of the list, the complete list will be treated as a blacklist.']}),"\n",(0,n.jsx)(t.h2,{id:"manufacturer-filter",children:"Manufacturer filter"}),"\n",(0,n.jsxs)(t.p,{children:["Each wMBus telegram has the manufacturer of the sending meter encoded as a 3-letter code assigned by the ",(0,n.jsx)(t.a,{href:"https://www.dlms.com/home",children:"DLMS User\nAssociation"}),". On their site you can find the complete list\nof ",(0,n.jsx)(t.a,{href:"https://www.dlms.com/flag-id-directory/",children:"manufacturer IDs"}),". The field in the telegram that holds this\ninformation is called M-Field. The M-Field for Lobaro is ",(0,n.jsx)(t.code,{children:"LOB"}),"."]}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsx)(t.p,{children:"Entries in this filter must be exactly 3 letters long. The case is ignored."})}),"\n",(0,n.jsx)(t.h3,{id:"examples-for-m-field-codes",children:"Examples for M-Field Codes"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"M-Code"}),(0,n.jsx)(t.th,{children:"Company"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"LOB"}),(0,n.jsx)(t.td,{children:"Lobaro GmbH, Hamburg, Germany"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"DME"}),(0,n.jsx)(t.td,{children:"Diehl Metering, Ansbach, Germany"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"QDS"}),(0,n.jsx)(t.td,{children:"Qundis GmbH, Erfurt, Germany"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"ARD"}),(0,n.jsx)(t.td,{children:"Arad Group Ltd, Dalia, Israel"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"SEN"}),(0,n.jsx)(t.td,{children:"Sensus Metering Systems, Ludwigshafen, Germany"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"SON"}),(0,n.jsx)(t.td,{children:"Sontex SA, Sonceboz, Switzerland"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"ITW"}),(0,n.jsx)(t.td,{children:"ITRON (Water), Issy-les-Moulineaux, France"})]})]})]}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-mfilter-whitelist",children:["Example for an ",(0,n.jsx)(t.code,{children:"mFilter"})," whitelist"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"mFilter"})," : ",(0,n.jsx)(t.code,{children:"SEN,ITW,DME"})," will collect only telegrams from meters by Sensus Metering, Itron (Water), and Diehl Metering.\nAll other\ntelegrams will be dropped."]}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-mfilter-blacklist",children:["Example for an ",(0,n.jsx)(t.code,{children:"mFilter"})," blacklist:"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"mFilter"})," : ",(0,n.jsx)(t.code,{children:"!SEN,ITW,DME"})," will drop any telegram from meters by Sensus Metering, Itron (Water), or Diehl Metering. Any\nother\nmanufacturer will be stored and uploaded."]}),"\n",(0,n.jsx)(t.h2,{id:"device-type-filter",children:"Device Type Filter"}),"\n",(0,n.jsx)(t.p,{children:"Each wMBus device is of a type (e.g. water meter, heat cost meter). The type is encoded as a 2-hex-digit number. The\nentries must be exactly 2 hex digits long, case is ignored."}),"\n",(0,n.jsx)(t.h3,{id:"examples-for-device-type-codes",children:"Examples for Device Type Codes"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-json",metastring:'title="Wireless M-BUS Device Codes (hex)"',children:'"00": "Other",\n"01": "Oil",\n"02": "Electricity",\n"03": "Gas",\n"04": "Heat",\n"05": "Steam",\n"06": "Warm Water", // 30 - 90\xb0C\n"07": "Water",\n"08": "Heat Cost",\n"09": "Compressed Air",\n"0A": "Cooling load meter (outlet)",\n"0B": "Cooling load meter (inlet)",\n"0C": "Heat (inlet)",\n"0D": "Heat / Cooling load meter",\n"0E": "Bus / System component",\n"0F": "Unknown",\n"10": "consumption meter",\n"11": "consumption meter",\n"12": "consumption meter",\n"13": "consumption meter",\n"14": "Calorific value",\n"15": "Hot Water", // >= 90\xb0C\n"16": "Cold Water",\n"17": "Dual Water meter", // Hot and Cold\n"18": "Pressure",\n"19": "A/D Converter",\n"1A": "Smoke detector",\n"1B": "Room", // e.g. temp, humidity\n"1C": "Gas detector",\n"1D": "Sensor",\n"1E": "Sensor",\n"1F": "Sensor",\n"20": "Breaker (electricity)",\n"21": "Valve (gas or water)",\n"22": "Switching device",\n"23": "Switching device",\n"24": "Switching device",\n"25": "Customer unit (display device)",\n"26": "Customer units",\n"27": "Customer units",\n"29": "Garbage",\n"2A": "Carbon dioxide",\n"30": "system device",\n"31": "Communication controller",\n"32": "Unidirectional repeater",\n"33": "Bidirectional repeater",\n"34": "system device",\n"35": "system device",\n"36": "Radio converter (system side)",\n"37": "Radio converter (meter side)"\n'})}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsx)(t.p,{children:"Usually the actual used device code that a specific meter uses can be found in its manual."})}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-typfilter-whitelist",children:["Example for an ",(0,n.jsx)(t.code,{children:"typFilter"})," whitelist"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"typFilter"})," = ",(0,n.jsx)(t.code,{children:"04"})]}),"\n",(0,n.jsxs)(t.p,{children:["Will receive only heat meters (",(0,n.jsx)(t.code,{children:"04"}),") telegrams."]}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-typfilter-blacklist",children:["Example for an ",(0,n.jsx)(t.code,{children:"typFilter"})," blacklist:"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"typFilter"})," = ",(0,n.jsx)(t.code,{children:"!08,07,F0,06,16,15,32,1A,80"})]}),"\n",(0,n.jsxs)(t.p,{children:["Will ",(0,n.jsx)(t.strong,{children:"not"})," receive any of the listed meter types."]}),"\n",(0,n.jsx)(t.h2,{id:"device-id-filter",children:"Device ID Filter"}),"\n",(0,n.jsxs)(t.p,{children:["Each wMBus device has an ",(0,n.jsx)(t.strong,{children:"8-digit device ID"})," or Address. This ID is normally printed on the device. The combination of\nManufacturer Code and Device ID should be globally unique. This is the most specific filter and can be used to tune the\nGateway to only collect telegram from individual devices. The amount of possible meters in the list depends is product\ndependend and ranges from 500 to 2.500 IDs, please check the actual product documentation or ask Lobaro."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"IDs for wireless M-BUS can omit leading zeros and are 1-8 digit long numbers."}),"\n",(0,n.jsx)(t.li,{children:"This filter also accepts 11-digit IDs for filtering Sensus-RF telegrams in X-mode."}),"\n"]}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsx)(t.p,{children:"The number of telegrams uploaded can be higher than the number of IDs in the whitelist, because some meters send out\nmultiple different telegrams."})}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-devfilter-whitelist",children:["Example for an ",(0,n.jsx)(t.code,{children:"devFilter"})," whitelist"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"devFilter"})," = ",(0,n.jsx)(t.code,{children:"88009035,13456035,56268931"})]}),"\n",(0,n.jsxs)(t.h3,{id:"example-for-an-devfilter-blacklist",children:["Example for an ",(0,n.jsx)(t.code,{children:"devFilter"})," blacklist:"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"devFilter"})," = ",(0,n.jsx)(t.code,{children:"!88009035,13456035,56268931"})]}),"\n",(0,n.jsx)(t.h2,{id:"ci-filter",children:"CI Filter"}),"\n",(0,n.jsx)(t.p,{children:"The CI-Field is a 2-hex-digit number that is used to encode type and purpose of a telegram. Some meters send multiple\ndifferent types of telegrams that can be identified by this field. Entries in this list must be exactly 2 hex digits\nlong, case is ignored."}),"\n",(0,n.jsx)(t.h2,{id:"telegrams-with-multiple-layers",children:"Telegrams with multiple layers"}),"\n",(0,n.jsx)(t.p,{children:"wMBus telegrams can have multiple headers in different layers. This can be the case if multiple devices are involved in\ncreating the telegram, because it is read from the actual meter by an attached device that sends it out. Telegrams with\nmultiple headers can have multiple different manufacturer codes, device types, and device IDs. These telegrams are\naccepted by a whitelist filter, if at least one of the values in the telegram is present in the whitelist. It will be\ndropped by a blacklist filter if at least one of the values from the telegram is present in the blacklist."}),"\n",(0,n.jsx)(t.h2,{id:"filtering-sensus-rf-x-mode",children:"Filtering Sensus RF (X-mode)"}),"\n",(0,n.jsxs)(t.p,{children:["X-mode is a special listening mode of the Gateway, that collects proprietary telegrams from meters by Sensus/Xylem. *\n",(0,n.jsx)(t.em,{children:"Only\nthe devFilter will be used on X-mode telegrams"}),"*. The IDs used for Sensus-RF meters are 11 digit long and written on the\nmeter in a format with dashes, like this: 1010-012-4411. To use the device filter for X-mode, add the meter IDs to the\nlist in devFilter without the dashes. Sensus-RF IDs must be entered using exactly 11 digits, e.g. 10100124411."]}),"\n",(0,n.jsx)(t.p,{children:"If the a single device uses X-mode together with any other mode (C/T, S, U), the devFilter is used for both. Any ID that\nhas 11 digits will be used for X-mode only. IDs with 1-8 digits will be used for all the other modes, but not for\nX-mode. If there are only 11-digit IDs in devFilter, it will be blank (= no device filter) for modes C/T, S, and U. If\nthere are only 1-to-8-digit IDs in devFilter, it will be blank (= no device filter) for X-mode."}),"\n",(0,n.jsx)(t.h2,{id:"filtering-m\xfcller-funk-u-mode",children:"Filtering M\xfcller Funk (U-mode)"}),"\n",(0,n.jsxs)(t.p,{children:["U-Mode is a special listening mode of the Gateway, that collects proprietary telegrams from meters by M\xfcller-electronic\nGmbH. ",(0,n.jsx)(t.strong,{children:"Only the devFilter will be used on U-mode telegrams, the other filters will be ignored."})," Device IDs for M\xfcller\nFunk\nhave the same format as in wMBus: 8 digits. When U-mode is used on a device that also uses C/T-mode or S-mode, put the\nIDs for both modes in the devFilter list. The IDs in the list will be used for both modes."]}),"\n",(0,n.jsx)(t.h2,{id:"filtering-strategies",children:"Filtering Strategies"}),"\n",(0,n.jsx)(t.p,{children:"There is no all-purpose-strategy for filtering. What is best for you will depend on your use cases."}),"\n",(0,n.jsx)(t.p,{children:"Setting an explicit device list for each of your Gateways will lead to the most efficient use of battery and bandwidth.\nBut it comes with huge administrative overload, as each Gateway will need an individually composed list. When new meters\nare installed, the list must also be updated."}),"\n",(0,n.jsxs)(t.p,{children:["For bigger role-outs it might be easier to work with device type filters. If you are only interested in water meters, a\n",(0,n.jsx)(t.code,{children:"typFilter"}),' set to "06,07,15,16,17" might be a sufficient setting for your bridges; it will filter out any head cost\nmeters and smoke detectors. Unintentionally received water meters can simply be ignored in the backend. A combination of\n',(0,n.jsx)(t.code,{children:"typFilter"})," and ",(0,n.jsx)(t.code,{children:"mFilter"})," will often reduce the number of unwanted telegrams sufficiently."]}),"\n",(0,n.jsx)(t.p,{children:"Individual tuning can be done by initially installing a gateway with no filters configured. After the first uploads, the\nwanted telegrams can be identified in the backend, and filters can then be created and sent to the gateway way remote\nconfiguration downlink."}),"\n",(0,n.jsx)(t.p,{children:"If the Gateway uploads telegrams that you do not want, you can put each unwanted meter on the device blacklist via\nremote configuration."}),"\n",(0,n.jsxs)(t.h3,{id:"filter-fine-tuning-using-maxtelegrams",children:["Filter fine tuning using ",(0,n.jsx)(t.code,{children:"maxTelegrams"})]}),"\n",(0,n.jsxs)(t.p,{children:["The reception time the Gateway for collecting wMBus telegrams can be minimised by a combination of filters and\nmaxTelegrams. If maxTelegrams is set to a number different than 0, the Gateway will stop collection and start uploading\nas soon as that many telegrams are in the store. Set the the IDs of all wanted Meters in devFilter and\nset ",(0,n.jsx)(t.code,{children:"maxTelegrams"}),"\nto the number of telegrams you expect. Be aware, that some devices will send out multiple different telegrams. Set\nmaxTelegrams accordingly."]})]})}function h(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>s,x:()=>a});var n=i(6540);const l={},r=n.createContext(l);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32ed6d30.42f6ca10.js b/assets/js/32ed6d30.42f6ca10.js new file mode 100644 index 00000000..f24327e7 --- /dev/null +++ b/assets/js/32ed6d30.42f6ca10.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[9808],{6302:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=t(4848),o=t(8453);const r={sidebar_position:1},a="Operation Manual",i={id:"products/sensor-gateways/wireless-mbus-g2/manual/index",title:"Operation Manual",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g2/manual/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g2/manual",slug:"/products/sensor-gateways/wireless-mbus-g2/manual/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g2/manual/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Wireless M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/"},next:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg"}},u={},c=[];function l(e){const s={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"operation-manual",children:"Operation Manual"}),"\n",(0,n.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(6540);const o={},r=n.createContext(o);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32ed6d30.aa7f4706.js b/assets/js/32ed6d30.aa7f4706.js deleted file mode 100644 index e52b53ba..00000000 --- a/assets/js/32ed6d30.aa7f4706.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[9808],{6302:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=t(4848),o=t(8453);const r={sidebar_position:1},a="Operation Manual",i={id:"products/sensor-gateways/wireless-mbus-g2/manual/index",title:"Operation Manual",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g2/manual/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g2/manual",slug:"/products/sensor-gateways/wireless-mbus-g2/manual/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g2/manual/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Wireless M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/"},next:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg"}},u={},c=[];function l(e){const s={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"operation-manual",children:"Operation Manual"}),"\n",(0,n.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(6540);const o={},r=n.createContext(o);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/38116bff.367af0b2.js b/assets/js/38116bff.367af0b2.js new file mode 100644 index 00000000..cfd15bc5 --- /dev/null +++ b/assets/js/38116bff.367af0b2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[4840],{6046:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var t=o(4848),r=o(8453);const a={sidebar_position:100,title:"Changelog & Updates"},s=void 0,i={id:"components/firmware/app-nrf9160-wmbus/changelog-download",title:"Changelog & Updates",description:"Firmware Updates",source:"@site/docs/components/firmware/app-nrf9160-wmbus/changelog-download.md",sourceDirName:"components/firmware/app-nrf9160-wmbus",slug:"/components/firmware/app-nrf9160-wmbus/changelog-download",permalink:"/iot/components/firmware/app-nrf9160-wmbus/changelog-download",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-nrf9160-wmbus/changelog-download.md",tags:[],version:"current",sidebarPosition:100,frontMatter:{sidebar_position:100,title:"Changelog & Updates"},sidebar:"allDocSidebar",previous:{title:"Cellular IoT Communication",permalink:"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol"},next:{title:"app-hybrid-modbus",permalink:"/iot/components/firmware/app-hybrid-modbus/"}},l={},c=[{value:"Firmware Updates",id:"firmware-updates",level:2},{value:"Changelog",id:"changelog",level:2}];function d(e){const n={a:"a",h2:"h2",li:"li",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"firmware-updates",children:"Firmware Updates"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://files.lobaro.com/s/tGrAkmwqBZgkgSi",children:"Available firmware updates"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"changelog",children:"Changelog"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://files.lobaro.com/s/BMpT5b2mzB7B35t",children:"Changelog"})}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>s,x:()=>i});var t=o(6540);const r={},a=t.createContext(r);function s(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/38116bff.e343561d.js b/assets/js/38116bff.e343561d.js deleted file mode 100644 index 6c3ec0db..00000000 --- a/assets/js/38116bff.e343561d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[4840],{6046:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var t=o(4848),r=o(8453);const a={sidebar_position:100,displayed_sidebar:"componentsSidebar",title:"Changelog & Updates"},s=void 0,i={id:"components/firmware/app-nrf9160-wmbus/changelog-download",title:"Changelog & Updates",description:"Firmware Updates",source:"@site/docs/components/firmware/app-nrf9160-wmbus/changelog-download.md",sourceDirName:"components/firmware/app-nrf9160-wmbus",slug:"/components/firmware/app-nrf9160-wmbus/changelog-download",permalink:"/iot/components/firmware/app-nrf9160-wmbus/changelog-download",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-nrf9160-wmbus/changelog-download.md",tags:[],version:"current",sidebarPosition:100,frontMatter:{sidebar_position:100,displayed_sidebar:"componentsSidebar",title:"Changelog & Updates"},sidebar:"componentsSidebar",previous:{title:"Cellular IoT Communication",permalink:"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol"},next:{title:"app-hybrid-modbus",permalink:"/iot/components/firmware/app-hybrid-modbus/"}},l={},c=[{value:"Firmware Updates",id:"firmware-updates",level:2},{value:"Changelog",id:"changelog",level:2}];function d(e){const n={a:"a",h2:"h2",li:"li",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"firmware-updates",children:"Firmware Updates"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://files.lobaro.com/s/tGrAkmwqBZgkgSi",children:"Available firmware updates"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"changelog",children:"Changelog"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://files.lobaro.com/s/BMpT5b2mzB7B35t",children:"Changelog"})}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>s,x:()=>i});var t=o(6540);const r={},a=t.createContext(r);function s(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/38df9547.0de9d82e.js b/assets/js/38df9547.0de9d82e.js deleted file mode 100644 index 2378c460..00000000 --- a/assets/js/38df9547.0de9d82e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8621],{9723:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>u});var n=t(4848),r=t(8453);const o={sidebar_position:1},i="Wireless M-BUS Gateways",a={id:"products/sensor-gateways/wireless-mbus-g2/index",title:"Wireless M-BUS Gateways",description:"This new documentation center is currently work in progress",source:"@site/docs/products/sensor-gateways/wireless-mbus-g2/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g2",slug:"/products/sensor-gateways/wireless-mbus-g2/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g2/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Gateway V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/"},next:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/"}},c={},u=[];function d(e){const s={admonition:"admonition",h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"wireless-m-bus-gateways",children:"Wireless M-BUS Gateways"}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsx)(s.p,{children:"This new documentation center is currently work in progress"})})]})}function l(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>a});var n=t(6540);const r={},o=n.createContext(r);function i(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/38df9547.9ba784c8.js b/assets/js/38df9547.9ba784c8.js new file mode 100644 index 00000000..3792c43f --- /dev/null +++ b/assets/js/38df9547.9ba784c8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8621],{9723:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>u});var n=t(4848),r=t(8453);const o={sidebar_position:1},i="Wireless M-BUS Gateways",a={id:"products/sensor-gateways/wireless-mbus-g2/index",title:"Wireless M-BUS Gateways",description:"This new documentation center is currently work in progress",source:"@site/docs/products/sensor-gateways/wireless-mbus-g2/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g2",slug:"/products/sensor-gateways/wireless-mbus-g2/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g2/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Gateway V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/"},next:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/"}},c={},u=[];function d(e){const s={admonition:"admonition",h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"wireless-m-bus-gateways",children:"Wireless M-BUS Gateways"}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsx)(s.p,{children:"This new documentation center is currently work in progress"})})]})}function l(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>a});var n=t(6540);const r={},o=n.createContext(r);function i(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/413f02fd.c2e48d56.js b/assets/js/413f02fd.c2e48d56.js new file mode 100644 index 00000000..2e88d12f --- /dev/null +++ b/assets/js/413f02fd.c2e48d56.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3521],{5266:(e,A,n)=>{n.r(A),n.d(A,{assets:()=>r,contentTitle:()=>d,default:()=>c,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var t=n(4848),i=n(8453);const s={},d="Devices",a={id:"platform/devices/index",title:"Devices",description:"Everybody* read access",source:"@site/docs/platform/devices/index.md",sourceDirName:"platform/devices",slug:"/platform/devices/",permalink:"/iot/platform/devices/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/devices/index.md",tags:[],version:"current",frontMatter:{},sidebar:"allDocSidebar",previous:{title:"Server Configuration",permalink:"/iot/platform/administration/server-configuration"},next:{title:"Downlinks",permalink:"/iot/platform/devices/downlinks"}},r={},l=[{value:"Overview",id:"overview",level:2},{value:"Device Properties",id:"device-properties",level:3},{value:"Alerts",id:"alerts",level:3},{value:"Location",id:"location",level:3},{value:"Device Data",id:"device-data",level:2},{value:"Uplinks",id:"uplinks",level:2},{value:"Simulate Uplinks",id:"simulate-uplinks",level:3},{value:"Downlinks",id:"downlinks",level:2},{value:"Config",id:"config",level:2},{value:"Settings",id:"settings",level:2},{value:"Organisation",id:"organisation",level:3},{value:"Single Device",id:"single-device",level:4},{value:"Bulk Operation",id:"bulk-operation",level:4},{value:"Device Tags",id:"device-tags",level:3},{value:"Security",id:"security",level:2}];function o(e){const A={a:"a",admonition:"admonition",br:"br",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(A.h1,{id:"devices",children:"Devices"}),"\n",(0,t.jsx)(A.admonition,{title:"Required roles",type:"info",children:(0,t.jsxs)(A.ul,{children:["\n",(0,t.jsxs)(A.li,{children:[(0,t.jsx)(A.strong,{children:"Everybody"})," read access"]}),"\n",(0,t.jsxs)(A.li,{children:[(0,t.jsx)(A.strong,{children:"device-admin"})," write access"]}),"\n"]})}),"\n",(0,t.jsx)(A.p,{children:"A device represents a single physical IoT device that might consist of multiple Sensors and Actors."}),"\n",(0,t.jsx)(A.p,{children:"Each device has a Device Type that defines the type of the device, e.g. how data is parsed, displayed and forwarded via integrations."}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Navigation Devices",src:n(1621).A+"",width:"735",height:"227"})}),"\n",(0,t.jsx)(A.p,{children:"When opening the device page there are multiple sub pages:"}),"\n",(0,t.jsxs)(A.ul,{children:["\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#overview",children:"Overview"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#device-data",children:"Device Data"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#uplinks",children:"Uplinks"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#downlinks",children:"Downlinks"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#config",children:"Config"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#settings",children:"Settings"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#security",children:"Security"})}),"\n"]}),"\n",(0,t.jsx)(A.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(A.h3,{id:"device-properties",children:"Device Properties"}),"\n",(0,t.jsx)(A.p,{children:"Device Properties are bound to the device and can be manipulated (read / write) by the parser and via API's."}),"\n",(0,t.jsx)(A.p,{children:"We are planning support to Edit the properties via the User Interface as well, deletion is already possible."}),"\n",(0,t.jsx)(A.p,{children:'See "Edit Properties" button below the property list:'}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Edit Properties Button",src:n(9365).A+"",width:"149",height:"45"})}),"\n",(0,t.jsx)(A.h3,{id:"alerts",children:"Alerts"}),"\n",(0,t.jsx)(A.p,{children:"The feature is currently not supported."}),"\n",(0,t.jsx)(A.h3,{id:"location",children:"Location"}),"\n",(0,t.jsx)(A.p,{children:"The device can have a physical location. The location can be set via the Web UI, APIs and by the parser."}),"\n",(0,t.jsx)(A.h2,{id:"device-data",children:"Device Data"}),"\n",(0,t.jsx)(A.p,{children:"Device data lists all data records returned from the Parser."}),"\n",(0,t.jsx)(A.p,{children:'The table is configured via the "Data Table Config" in the "Device Type".'}),"\n",(0,t.jsx)(A.h2,{id:"uplinks",children:"Uplinks"}),"\n",(0,t.jsx)(A.p,{children:'Uplinks are raw sent messages from a device that were received and tried to be processed by the parser to create parsed records ("Device Data").'}),"\n",(0,t.jsx)(A.admonition,{title:"Parser returned nil",type:"note",children:(0,t.jsxs)(A.p,{children:['Not all uplinks return a good data result, then the parser result is "Parser returned nil".\nThis is ',(0,t.jsx)(A.strong,{children:"not"}),' a general error, but a hint that no device data could be extracted from the uplink.\nOften this happens with status uplinks that do not contain user data but can be processed by the parser for meta information,\ne.g. battery voltage, that are shown under "Device Properties".']})}),"\n",(0,t.jsx)(A.h3,{id:"simulate-uplinks",children:"Simulate Uplinks"}),"\n",(0,t.jsx)(A.p,{children:'For test purposes, it may be useful to simulate uplinks through the platform and let the parser process them again. For this purpose, the "data" part of a past upload can be used, as shown in the highlighted part below.'}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Uplink",src:n(5362).A+"",width:"1200",height:"918"})}),"\n",(0,t.jsx)(A.p,{children:'The copied data can then be pasted in under the "Settings" Tab and send to the platform again for processing with a click on "Send Data". This data then appears again under "Uplinks" with "http" as datasource. Downstream processing, including any integrations, is then just as if the data had been sent from a physical device.'}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Simulate Uplink",src:n(8776).A+"",width:"842",height:"552"})}),"\n",(0,t.jsx)(A.h2,{id:"downlinks",children:"Downlinks"}),"\n",(0,t.jsx)(A.p,{children:"A list of queued and sent downlinks."}),"\n",(0,t.jsx)(A.h2,{id:"config",children:"Config"}),"\n",(0,t.jsx)(A.p,{children:"Requires Trait:"}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Remote Config Update Trait",src:n(8386).A+"",width:"149",height:"29"})}),"\n",(0,t.jsx)(A.p,{children:'The config tab is only displayed when the Device Type has the Trait "Remote Config Update"'}),"\n",(0,t.jsx)(A.p,{children:"Allows to see and edit the device configuration."}),"\n",(0,t.jsx)(A.p,{children:"Config properties must be updated by the parser, else the page is empty."}),"\n",(0,t.jsx)(A.p,{children:"Updating configuration only works for NB-IoT devices yet (10/2022)."}),"\n",(0,t.jsx)(A.h2,{id:"settings",children:"Settings"}),"\n",(0,t.jsx)(A.p,{children:"Edit devices Settings:"}),"\n",(0,t.jsxs)(A.ul,{children:["\n",(0,t.jsx)(A.li,{children:"Name - User friendly display name"}),"\n",(0,t.jsx)(A.li,{children:"Address - used to identify the device when receiving Incoming data"}),"\n",(0,t.jsx)(A.li,{children:"Serial - Serial number, provided in device import"}),"\n",(0,t.jsx)(A.li,{children:"Device Tags - see below"}),"\n",(0,t.jsx)(A.li,{children:"Description - User friendly description of the device"}),"\n",(0,t.jsx)(A.li,{children:"Device Type"}),"\n",(0,t.jsx)(A.li,{children:"App - Deprecated"}),"\n",(0,t.jsx)(A.li,{children:"Datasource - allows to assign additional Pull or MQTT based datasources"}),"\n",(0,t.jsx)(A.li,{children:"Parser - Parser to handle uplinks and generate device data"}),"\n"]}),"\n",(0,t.jsx)(A.h3,{id:"organisation",children:"Organisation"}),"\n",(0,t.jsx)(A.p,{children:"Each device belongs to a zero or one Organisation. There are multiple ways to move the device to another organisation."}),"\n",(0,t.jsxs)(A.admonition,{title:"Required roles",type:"info",children:[(0,t.jsx)(A.p,{children:"admin, org-admin"}),(0,t.jsxs)(A.ul,{children:["\n",(0,t.jsxs)(A.li,{children:[(0,t.jsx)(A.strong,{children:"org-admin"})," can move the device between different Sub Organisations in his Organisation tree."]}),"\n"]})]}),"\n",(0,t.jsx)(A.h4,{id:"single-device",children:"Single Device"}),"\n",(0,t.jsx)(A.p,{children:"Go to: Configuration \u2192 Hardware \u2192 Find and open the Device Page"}),"\n",(0,t.jsx)(A.p,{children:"Change the Organisation"}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Change Organisation Control",src:n(3979).A+"",width:"505",height:"58"})}),"\n",(0,t.jsx)(A.p,{children:"Press Save"}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"save-cancel-buttons.png",src:n(9773).A+"",width:"192",height:"46"})}),"\n",(0,t.jsx)(A.h4,{id:"bulk-operation",children:"Bulk Operation"}),"\n",(0,t.jsx)(A.p,{children:"Go to: Configuration \u2192 Hardware"}),"\n",(0,t.jsx)(A.p,{children:"Select multiple devices"}),"\n",(0,t.jsx)(A.p,{children:'Click "Bulk Operations"'}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Bulk Operations",src:n(2563).A+"",width:"157",height:"51"})}),"\n",(0,t.jsx)(A.p,{children:'Change the Organisation and press "Bulk Update"'}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Select Change Organisation",src:n(8526).A+"",width:"261",height:"244"})}),"\n",(0,t.jsx)(A.h3,{id:"device-tags",children:"Device Tags"}),"\n",(0,t.jsxs)(A.p,{children:["Tags on device level are meant to group devices inside an organisation. Use cases can can be external ID's, Installation location, data export targets, etc.",(0,t.jsx)(A.br,{}),"\n","Some future plans are to filter by tag in integrations, display tags in the device table and use them for search, grouping, etc."]}),"\n",(0,t.jsxs)(A.p,{children:["Currently the most important difference to device properties (where you can also story lists) is, that the parser has no write access to tags.",(0,t.jsx)(A.br,{}),"\n","Also a device with too many tags might get less handy, where device properties can be added as needed."]}),"\n",(0,t.jsx)(A.h2,{id:"security",children:"Security"}),"\n",(0,t.jsx)(A.p,{children:"On the Security tab, all security related information about the device and it's connection can be found."}),"\n",(0,t.jsx)(A.p,{children:"You can find information like:"}),"\n",(0,t.jsxs)(A.ul,{children:["\n",(0,t.jsx)(A.li,{children:"If DTLS is enabled for the device"}),"\n",(0,t.jsx)(A.li,{children:"Certificate fingerprint of the device"}),"\n"]})]})}function c(e={}){const{wrapper:A}={...(0,i.R)(),...e.components};return A?(0,t.jsx)(A,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},2563:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJ0AAAAzCAIAAAACUp0fAAADWElEQVR4Xu2bzW7aQBCA8zy8QF+gL9C+SI6oufTaQw7tjQfgxKU9cOQFWkXKgZ8GVeWAACEiVflRW6mq5M7u2OPZ9cIahA2ezicrMst6Pey3M+tE4eJZkciF36CIQL3KRL3KRL3KRL3KRL3KRL3KJOJ1sVhMJpPhcPhZaRS7vILU8Xi8Wq0SpTmAVPi5yytkqkptHHGvUH79i5SzJ+4VeyjNQr3KRL3KRL3KRL3K5ARev3z/+enmwW9VjkrdXr8uf7faEziuekv/PeV41Op1MHp6+vX3TW+JauGl3+MwNvPL9uzWnK077Wl/479/Ykx4dUdVn9ePNw/g8vWHGap98fZu8eOP3ynnsX9t3ONxOXj03+fs5dV0ppFjnQ9mNGtdz+/91vqoyStKxQPV7pSaWK806TFb5b3CdPMO1nFnxHscif/BK5cKRyxTEe7V5C7O/m2XaYC5667NScgr9GyljUTIOgnAQYx4GyeObLFDOWUDWi4H8w402mupA768H0zpw5po8/CcakGjmf7ddTZIHmHxvuWp3GtRKjw6+Z0CMK8wF9naL+nVzFQxXcI5lMnGGU91mpWEs4mTTo20vNiiWXcKVzn3csKj+PPRcB3k57Q42Nral2q9Hio18fZXclnK62BWyFQL9XfIFhDPqoTEOCkOc43abL4Gcog6BL36qrJ4nHYKI7wKy1KhV3jcPVRq4tbhfB5LeHXWgUN4puASe63nNS0S6YD5Ye/oeeWFd7dXZzVkdcj1ncVDwwZijlOVV1AID0ev3qfb1Z5SE88rKSzhddofzbf8XlFif+XtZvB8ljncK7dyhHwt3NG/qhxVeX357ttVb4lq95eabMtX9iFtJgW9buyUFRWmGeAuF3pp99fMVr4Rmq20MK3cKzuP7a/2FuH9dbvXLWUmQiVeQSemKardX2ri7a/ux8ZG++y6zWtWxAIF2bikkd3C2571s4rKCiaPJB3crcMU0rTTpUqbXrXjeZhiC3pltT1QMKJU4pV2VkjWg6SeAq8ON5xKvIJL/JOh/8Y5o15lol6V80e9ykS9ykS9yiTuVf8vvInEver3OJpI3Kt+76qJxL0+6/ckG0vEq9JQ1KtM1KtM1KtM1KtM1KtM1KtM1KtM1KtM1KtM1KtM/gEEExtuOtr9jAAAAABJRU5ErkJggg=="},9365:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJUAAAAtCAIAAAAoWb4AAAADZ0lEQVR4Xu2bz4vTQBTH9+/JP7D/gP+A/gP+A8oeF09608MeFBTWo0tPXgTZ2xa8eJEKvRS1FYpUF/oDxS1FYSnEb2YyMy8v0zZNO2sG3occksmbaTqfvDcppAepEDMHvEGICvEXN+IvbsRf3Ii/uBF/ceP3t1gsBoNBp9P5IDQG6IAUqKGmPP4QgdDJZLJcLvk54f8BHZACNVShxx8kI463Cs0AaiDIHnr8wbBkXmOBGgiyhx5/KLW8SWgSVJD4iw/xFzfiL27EX9zchL83H3+fvf/JW4V9ENxfuzdPjj9hg0V+TtiZsP5+/Lq+f/Zd+8MODnlEbXrDpDXOdqajo+P++ZSfbw6zdj85Gc14834I4u/5xRTC7r78dvior+XpDYda5+O3aurXAD2k42mPn3f+HFfnJ77IdHxKhjpqX/HzIcDlBXNGCeLv8OEXO19w+fnyLzYt1W68D8Ojp4gnYI2/Ydfte2P2TdT+sNRphVoecg65SBVuXgs9elKSScNuoX5CD0kyPnHUX1bNVAqisX/ezrJcZ2RW5fIRXDXutnB2jNuCtasPNVdihk1aIxU5fOeGyu4Vdcp8l1JH8qXqrAJB/AEIwzXB2b1X+fp359kQ61+i6iqPLuPxR9NLfeeCPxZAWeXPjJDqcm1i3ICZPzetLka5t43qdlH6iQCSf8RfueOqa65KcH96B9vtp1v6M7dwPmusIvH8Syv5cw87ZCpLHaFNH6r8s+tlHlbIJzN4sdHvz9ux+BFbE8QfyqOeel0/YQ7brvWTtWznz94K1hnzV6hdJkf55GqvpNK6Mav6K3XUl53UfbAK4o8+v7y4mCHtsGHHNiKA92F4/ZH8c/NVyZ+rn6SxRv7lqspzXdFfuaOBX0NFgvhDnsHQg9eXt558pXccDvHLAblYJ/9UGu2+/pFGl3MqM1atf/l+FqOV+H5xVvHn7WipV0iD+LPM/yxhUcvDDj+9hsL6Z74YfXjz1E/Ta+3zJ2nkNdN8nAtWczpyD702ml6eZ21LbVXk6yXvmIfZcbYlrL+UrIXt3pyfazz1cuImCe4vVQo3F8xGIv7iRvwJYRF/cSP+4kb8xc0Gf/L+bpPZ/P6uvD/fZDa/Py//X2kmVf+/ksr/xxpJ1f+PCREh/uJG/MWN+Isb8Rc34i9u/gGIyK4erI9gTwAAAABJRU5ErkJggg=="},9773:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAAAuCAIAAADx8IGiAAAELElEQVR4Xu2cP08UQRjGr7G18VvwBSytbCz9BH4DQkVBYWtBY2JxNgjmqE1OOgkJiRYKCQ14B8aLXCyAjfwJ2BCS8Z2dP/vuzOwx587F9XiePCF778wemfd+9867l+y2BATVUMsNQNA4AkBQLQEgqJYAEFRLAAiqJQAE1RIAgmopDNDV1dXBwcHW1tbnaRetkVZK63VTIMT59s6nR0/e33vQbd2/46YkUCooIW6OggBRNimtx8fHNzc37tjUidZIK6X1OgxRsoCOY0qIz1AAIPpGUk7d6FSL1kur5hH6wvkZhCktPEsiCBB9He9C7eGi9dKqeQTlJ2hKC8+SCAJEnYEbugNyVu3nDlbmWRIAyAoARZpnSQAgKwAUaZ4lAYCsAFCkeZYEALICQJHmWRIAyAoARZpnSSQE6NWHk5n5r1++/1Yv6YBekumY/r7bPi/Nbp4AUKR5lkRCgBQuVQA1n6FUAA2XV4dvOvHxf+O5zWvRP/TjEeZZEpMG6OHzvh1SMI3UxdqinjkzP3B/M5+wEgJEpzus6ODyqj8/YPnpGp1t7vkT6rv5AImcoZ+nMhVxAEl6Ztcv9Kvd4dpJaXjSSgVQ12NoLHr2NqhOn2dzJrLUv1xy5yRwYwF6/OLbs9c/uJ++HEQDtB+A5mQ4a05v76pp6sCMLg4zeXTU1tNCbxKhhAB1GUNkeRBHz4jPNQdLSU+Qkd7KYU8FGXOtlUszVcNXlDTz5tX/6Fab99ZKCRD10VR1glYttntOWdn6vr9zZesDDcTuQI3KaZ0jM7qfFy1GlQTOfZMYpQWoaxgS8fQYJvx4t7WQ9fReJonJ5yikFCLyWG92kh7LTSYPKGLwWurrac0EiO9fjlRL5EZ9SUqqGiCqMXm8qDqmaNFZOsKCY2qCAEX3zsTB9caCHy+ZILAAWdosEGbUugwlwZRPm1qAlCRGFgK7N1mwGDeqFGnsChd7XLTSAmT7nmBPXeXqCpSTYeUDZMjwEWR7n1JejaYcoGJvIno4SboyqdGdjgHFklRDCQFyuuYxGKr6XO3Wo45HAuRXoEBVq/pHEeZZEk0C6KhdQGCuyHhDY3ogKbmLDdqLdqeTVeovqg5XKoCC11zxDOVNMfto86swjkWpB/IAUv1yqQeSEd5i66EmAvT24y+/fVamodsAUk203oPs9XwR7AxsBdK/GPGqwy7WWD80hhICFOyaq+K+S5uORmQhO9OBy96oCiSPi2su1jtbqVMaCJC6zhphmuCe0ySlAmjqzbMkEgL0vwsARZpnSQAgKwAUaZ4lAYCsAFCkeZYEALICQJHmWRIAyAoARZpnSQAgKwAUaZ4lEQQINxYK3FhY4agbC3Frs8CtzRWOurUZD1cQeLhCyLEPVxB4vEsuPN7FerzHu0BQvAAQVEsACKolAATVEgCCagkAQbX0B/LkACnqSSMXAAAAAElFTkSuQmCC"},3979:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfkAAAA6CAIAAAA837cdAAAFVElEQVR4Xu3dv27bRhzA8TyGH0hPIiBjNPkJOnToYMgCumQLsjQBZEFbO7VdUgg0ogwtEAgZCrS1rSQo2kZBDEOF+uP94/FEnSSWkUj6+wFhiGeS0fS98zm2H6wAAG33IBwAALQOrQeA9qP1ANB+tB4A2o/WA0D70XoAaD9aDwDtR+sBoP12aP3NuNexHo2vw0//X9ejXud8Go5ulb6rwf63AcB9tK31aVJ74xt7ejnoHLGw8mY+w2QDAK0Xb/31+FFncJkfGvV6oyP1ltYDQCnx1k8H66t4WdqrLZfpeWcwSrd3VPrTWUHpjUfmAvVFgB3UXxmoWE9Hek/IDLrJI93M0Qpv97aS0unH6768E8OOqGdOzVtiegBw70VbX7iOtoNpYf3amj13Ff1g/91OD7rXWdnVoG190byi+be79+O/DfvP+c+0c0nBlyYAcN9EW1/YX4msW9ebhkpP83v6fvf9FXdRrG3r1cW5qWWX2+Ua/x2aN+xvNB1z0wkA6iHe+oJFsUun1/r8lGBa793rGl0Q63yL9UbNHrfTegDYLt56vWmerdnV3ohpq9f69LXtqdvDkexmO/KbF+brLda93vX2TXs4tB4AnG2tX9m1tr+XovitV4HWsu/NqolBDZ0PNi/MXYvdE8xjC263uzr5782ubfXQegDI26H1e6KtAFA3lbc+23sBANRENa13+y1mgwUAUCfVtB4AUGe0HgDaj9YDQPttaf1isZjNZkmSTAAATSDFlm5Lvf2Yx1ovl8o98/l8uVyGnwMA1JIUW7ot9fZzH2u9zAxyQzgKAKg9qbc03J3GWi/TAit6AGgiqbc03J3GWj+ZTMIhAEBD+A2n9QDQTuVbf3Vz92z8/svBH1+c/b71kMvkYrkleAgA4ABKtl6qvWPlg+KTewA4vJKtl0X6esp3OeRG/zkAgAMo2foSi3p9yI3+cwAAB1Cy9esR3/3wnwMAOIAKWj95+eHX326DQwbXK/95Wp/0T7rDq3AUANrhGyUc3TxeqILWS9lf/fLx5u2drry8kFN5sV75vVo/v+h2L+bhaAFaD6DNJOinp6dB1gsHI6pp/Q8v/r5+e/f6zSc55IWc0noAqEpQ9n1Dv6qq9f66Xo4ff/on8h91/OdEFLZeBk8M13fV+suh+cTDobsnObPX2kEZ6V4M+27kyt4lj1v7twCgPlzfS4R+VVXr9UJer+sl9F99ffXk+Tt3PH46r6b1l1LpvvmdDmmm9eska7fu+5m+JOmbF/PhQ5NyVX/7BHVj3/yVxPQa+xoA6khXvkToV1W13l/XS+vluL39V0b0x2A/x39OxFrrwxxLuNVpfg8nmwMy7lFqXW+emX6JYCYDRSYS/xQAaub4rdfr+lc/f5RDt17q/2z8Xn+srvW5fXl7QbBfL6em9d6GT7au91ufe75MEt7+DwDUSi32cF6/+aSX8HIcf12vku0v21nXA2i0oO8lcl9N67/9/i/Jvb+un7z88OT5O/2xotbrdfqG/fqirXl7e+Gg+cYs+/UAaq6w7IWDERW0PvhZqvF3f8rhjwQ/V+U/J8LfgTmxUfYG/W+xdocXafBT2dpczQGpbv+sYF2f8v4fDqEHUE963yYc3TxeqILW73v4zwEAHEDJ1vO7zwCgQUq2PvKjUvGD32kMAIdXsvX8rRIAaJCSrV/xNwgBoDnKtx4A0BS0HgDab9fWJ0myXC7DUQBA7Um9peHuNNb62Ww2n3s/hQQAaAiptzTcncZav1gsZFqQG1jdA0BTSLGl21JvabgbjLV+pXIvM4PcMwEANIEUW7rth361tfUAgBag9QDQfv8BocOQaFFPuXcAAAAASUVORK5CYII="},1621:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAt8AAADjCAIAAADST+9sAAAlYklEQVR4Xu3d74sdx73ncf0Z8zfkf9hclvh5wmUXGwICiTUEgs0SMGFhYSHcB5rACnmeBC9c0L1x5OuNx7KyjnVj2dfxSB5JMyPJlixbtsayEtn6EV/J66tw/WzPVld1f/tb36o+p8+Pman2vF8U4kyfPtXV1X26Pqf6jObACAAAoCQH7AIAAIA9RToBAABlIZ0AAICykE4AAEBZSCcAAKAspBMAAFAW0gkAACgL6WRIvv+r71oBACBFOhmSdHQfegEAIEU6GZJ0dB96AQAgRToZmK8e/7/vTLH7BgCARzoZmHSMH26x+wYAgEc6GZh0jB9usfsGAIBHOhmYdIwfbrH7BgCARzoZmHSMH26x+wYAgEc6GZh0jB9usfsGAIBHOhmYdIwfbrH7BgCARzoZmHSMH26x+wYAgDf4dLJ5dGnp6dUHdnFvd1cPL1UOvzp7HbspHeOHW+y+AQDgLS6dbB1zQ/zqXbs4o1oz79iWXdd58GrID/nV5konPppkN1qsdIwfbrH7BgCAtxfpROmTLXw6ObYpP/twI1MdfWoIqjWPttWM0pqHIB3jh1vsvgEA4A0wncSv6lNDQDqZqhz/zSvP/Nfnvvjq39OnFlXsvmF6jx49euqppzY2NuwTg7W9vf3kk0+6f+0TmMnq6upzzz337bff2id6OOrZpUPjdsF9oHX/ztMVPQ36/ega/5Of/KSct94g04nfVr2kTw3BvkonLlvoe2F/d+R/puvsebH7luMuJe6Covdl/Ds/rD9+nYVw72S3IfevfaLh3uTurT5mhZntXM3zcz2vD9ZODwaaG3v0pnd56zMIo2ZQSAjYtbdPf7qXZmjYLrxZyum0Od8CC0kn7uXnzp2zSxvbnl3aYUfTyab+gkn2a6d9skUmQ3Snk/hLKk177Ddd3Gujtqn6H6w+rRZHaaZ6ybEtv8XmqTrxtPWHLarK4zw0v3SMzxaXTlyRH106+dv//NTNOw/TNfew2H3LcW+tX/ziF3JCh48mYy7lu3alIJ1kuZ7XR8ddLn/wgx/0vx7Nb9dOgHmERuqOco+nGkh2SFG9Z97srm2//vWvp+0id+65C8i0r5pKUZ02mqM9C0knP/7xj5944olsJW7hj370o5/97Gf2iQ47lk7ib4fUvxqTDNWzpZPuOzubx1RtPka0L5w8d2Ib6UOGrtzt0dOH7Xdy25f4ZPP04cPSD77CbCybWTrGZ4tJJ1/5gCJLZGYlzKmcefeivonjFrolbh2ZcXGxxoWb8BL3lFuyefXm3/zHH7gfJfTIOm65e1ZvuqvYfcsx6WQUv4Xks4K7ij3y3IOwJFzrzQptvXPT6cRdQN118zk/xxM2pKcQXBvC+qFterR2D9yPobWuhrCm+9ftslsSqjK7YGrWvaF3X67pIcqcPn1aXhKWS7Vjot4MTDoZ+Q3pxoT9DftiYtaqpxfqPQpXW1NDs5GWvjS7f/WQH+b2Q3vkE7m+iMvCne4l3SeBbrZ76oUXXnA7GBovneD+dccxvFD3jLQ2PQ9H8bbMDkpnLvl+0HWGTYceM6+VmsO555oUKllsF42a42WXenJc5N2UbYx+s7jHuiukBtdjcoVxz8r5IGfy6tj3o+m0e/fu6QF+9zttlKQTfZR1f3b1YXg88Y3Wxb3whz/8oUsh0gmy3C10T5nlY+xQOqnGaTsqZyZXZkkn/se2nnE1VOEgXnNsOklXiH+px4eVeAUTgGwmG9+8maRjfLak6UQiiM4iIbK4YHHov/wkRAr32D3r/pV0EmKHhJJzG9f0+qG27S8euX/DOv2L3becNJ2MmsuW/ix11Avryzszu8KiPIrTibzDZUN6lNWtkuXptSBcO1bVfEN2F3TNUknYhB5L9AgkLwxf6TDD9gKl6SS7v6EBX3/9tT5Y4UDr9Z9qbuG7hR9++GFaQ7oLuqv1+o+a4xUuylKtfMdFhi6poWsT89ODh5AGuH9lSDC781QzlxCaN4p3IXseSrV6bA7cGCmdGbaoNzdSZ9Gq+saGdEtoj36c7tTM9LEzpLWj+OzKNmZbzZ1ID+gjq99uRzvSyfj3Y9cpt/udFqTnTHisl3f1YWj8mM7vYzsJKNvTR5PRTqWTOBY0/NxDHFn6DN7JbxR3zqPU4vs4MtWRho84ndQ3bmJ+OqR+VUf7dZ3JryhnmjefdIzPljSduDDx3/77L0yMcA9CBAnzJXqJpBNZoivX0yohzei5mZ7F7lvOt7l0surpJXIpMZfXdIVFeRSnE2mPXIbkPa8XjtQemdFCdsosF7ILuma5juhNhHXCRVmvLJ2jFy5W2s/SUXq/9MKw12mD06qyNegVRskJIOON1Ga6Nxw7czkOrdq5XkpP6ZFqYfZ0MusI/QbJvlD211SlSWemvZd2jmzRLNdbn1/P4ztqDnFXY+S8GjWH3tRgOlCWd50wQlbQFUoz9qTTAt0e0/jQ5ol9mK4wrW0VULZniiajnUonuWmSztF90uBt77/Eohrq/1qtWTnOCjZJmJqTYOHZdGJWsHUmlfTZwamkY3y2pOkkhIwvvvp3FyZ0epMJlfCsSzBhUkQiSFqV3BgKwq0cqbl/RrH7lqOvHUIuIhtq5ja9UmRXWBR99dSXGLkabsfpRJoRbPh5Zn1hkh/TC4q8KizXNcsFRa6VgTRPrzxKum7aaduJTDNGqkNW46/shc+j8qw0TBps+mfkeyatQa8wyp0AoT1Sv+nesJVHan4+COvsUC9lL/2yv/p0Mv0pP4bdNP2QPQ/1/oYOlIyi9zrso+m9UKE+1WX5RhIIpP0LYSoX6QUhbLerMdIPYeFRPzbrGvSPcpKMutNJOCUCfSzCC6UZe9JpgW6PqT/0xtdffz2xD+XcSE/UnrZ9QHnCmyGajHYqnSx+7qRPOtFJwpsqneTCx3cmnYTo4CKIzh+6hCkQt4J7Ntz00ekknTvpiiCyofSptNh9y0kvRtvqs7VcZ81VO7yjsissir76ZEcFaeeoY+vmqieV6OXZXdA1ywVFrxnWSZsRtqIvN+ZV80v3VO+XvlAG4fiGZoRGSoNN/4w6ajD0CRB+dJV89tlnUn/a7Rt+zDBjibbwXkp3TTdbn05m0+GFemX9Bsmeh+m2whIzFIXdN70XKtRrjtQWzfI+R2cqeneEaeFo0qgv/RAWmt4bxTEoVBWWy5msO1AfDllBVyi17VWnjZJ0oo9+aHPPPhx1Z8Setn1AmS2ajHYqneSCSHZCpc/gPXM6CbeEeqcT+/JK8r2TIaaTkBgkYRzv+I9M3Ar67oyEkvAFWP29E/fv3/6nJ9OII/V0ZRdT7L7l6IvvyJ/u7pNi+sY76oX1s+9MWWFR9Hh2NDcqbMcZIr3BvK2+MRD2K1Sim53dBVOzXA3dJqQZ0iS9clium2GenZ9csoOj6ldR9P5qq/5bhy+88EL4UZqkj/W2/95JVw1aeuUNfSg9s6q+RrCh7r6POUMW3kvhYMnmQpv1gZbW6jNHXiUHfRT3qn7hdnc6CUPs9evXZaekH0zvSYX6OIaXf+u/NrGjA204AaTOb5vvfLglctTk0HQ1RvohLAxdsaq+EbKqzgdZQR8g3YH6sT9fqse603Qz9qTTRnF7Qh+Gx3p5nz40L5nNtmeX9rND6ST5fmjHb6/0Gbx7pxP/OL5To9NJWo9dEl7Spg3zNdiBpZNm9rFiJjNcgEifcg/0r9voKRP5DR1Zwa0sNZgbRmaiZUyx+5YT3h6yLT3Hrp+SK8XIXwiW/PR1+NJlusJCPJqUTsLypdzvR+hrlizRv7MjTe3aR6lZX1DCJTWsrNuTphPZbvbmyDykZtOM9FnZF30BDT9Kg6XTdJ5Ia9DS6+l2nGlWm1/B0NXKC0PNYfnO9dIoObF1R+nTaaQ64Sn1OzvSNtdXrp7QvOx5KKfTavL7a7LkOS8slLfPtx2/syNn7y4MtPqU1kch3Zeuxkg/hIXmHbQU/86ObE53tX5V1/tROq3rd3Z2s9PMW0DOn6X4Ns2YPsxeSXbfjqWTUZsPguSmSaXP4G0zRCyuQf1vJW6hzQry35DUteVqlnUqcZwaUjoZRLH7tr8djWc1sCh6fBrFg83g7MRgts89GntTD3tocekEuyId44db7L7tYxvqFgMWy8S+4aaT7R43tjAtPQWCopBOBiYd44db7L7tM3rGdSfuHSDMt5uxZ1jpRM+xL83xCxTQ5KbG0pT/1zt2E+lkYNIxfrjF7hsAAB7pZGDSMX64xe4bAAAe6WRg0jF+uMXuGwAAHulkYNIxfrjF7hsAAB7pZGDSMX64xe4bAAAe6WRg0jF+uMXuGwAAHulkYNIxfrjF7hsAAB7pZGDSMX64xe4bAAAe6WRg0jF+uMXuGwAAHulkYNIxfrjF7hsAAN6B7/9qRKFQKBQKhVJOIZ1QKBQKhUIpq5BOKBQKhUKhlFUO3L9//+OPP7527dpFAACAAhy4fv36n/70p7/+9a+PAQAACnDARRO7DAAAYO8cYNYEAAAU5YBdAAAAsKdIJwAAoCykEwAAUBbSCQAAKAvpBAAAlIV0AgAAykI6AQAAZSGdAACAspBOAABAWUgnAACgLKQTAABQFtIJAAAoC+kEAACUhXQCAADKQjoBAABlIZ0AAICy7E06WT/+0feO37FLseMevPLLG6/ctkuVOys//+h7P/9oZcs+AQDArpkhnbgRrhrApAxgJNvazrbz9hs3vvfz7fX2seyUG8Kr3dQvMYmqWl9+vH3rpz//6KdvPJBnG/Vg/71Znu1iG/bYNGacCemkdz0AAOyg2dKJHuH8EFv4kObSyS9v/PSXt+JxOYSDNp2YiBAP1SGT1Ss/9mElRIQqtfzy1ivHcwlj61bdUVV8sbHg9hvbzZKqJWl46pJkiAmZQ5mwZtoJAADsvvnTyWM/uMoSmQ+ol6xHw7Z7thrg9cJ20qJJD9V4H88otOtkYtCtE4cOnrhpl0ZcOjl+yzTbj8S3QnuaH+OB2UUKCTTV4+2Vtga9y5V4N1Npp0UmvTxWZZ02J/nsFdrZTsbYaZ66P++0zfDzPWF5G7PqJaHyTG0hGDVrJiHVLgQAYBYLSScyuKqbDjKCtmNnSAnVOCeDcTXaSSh5o3qgJgaa2nQNeS6gLC0tLa/Z5Y2w3WbrXogXdVp6nE0nKoKEZ9t1kiZNiBc66GRkunSs6OaO7nxpQ9se1VQfU2SPmpmb6rZX2gn52kLQCZtWxy533AEAmNVi0kk9qkVjtqzWJgB9N6QZUE1V0ZxEXW3fAW9t2UWUQydu2eWSilTl7ZLs907aBkftbHYwjTId6aQatqsKx0UTP2mRmRNqpy4yN33apNXslAlMdR6Kckyuwx+bTkgzjX+iTlcqO6ogkj/uAADM6IBdMFlm+KljR/UpXAb4dlitn1XzB81Y3o6LDXU3IZQwFtY1T8ooZ6t8cvClJJ80Y3kz+maSUxo4KjbEhAdmyK90pJOGv42SCRl+f3PLJ1KhRLooijjSVH2w9I+6q5NOyNcWpxPplo7jDgDAbBaRTvRn6MwcQL1cD/8qnaRzJ90RxHygV269dNDlkqUjHfd2opmG7XXzo3+UTyd2/ZC0Mo2ckE7y9Wfq6S9sUaajbOfk506kw3XP5zohX1t3OskedwAAZjJ3OolmBaqP47nPzdUwtnK8fZWM5dVNDZlQ8d876bjN4eVv8VRfOsnMl2hxvFAf7nMDc6S+NdPuVJgnSFoYpZNmaA975LU9o/c911e9VVu5oTqk2kSS//S3Q8LdK38UdE9We5R2QndtaTrpPO4AAMxitnSip/HjuKB+E0R/+NYpJPyoR756/XrY0/U3Ny/0jzPQH+6jL6hOTCdhRFf72HGPJptO/GvrfZGXNGuabpzw3ZScKhMk91/q2vS+SA/r39lp23Z8u6MTMrV1pJPO4w4AwAxmSCcAAAA7iHQCAADKQjoBAABlIZ0AAICykE4AAEBZSCcAAKAspBMAAFAW0gkAACgL6WSw/B8Vyv9doU7+DyVO/SoAAHbVLOmk/qM2QfI3gfPP3jyhloqDJ9ab5VE91X9OX6+hBlGpeflsu2qlrvzgiZvx8kg7MHvjV473Yqn7L/j0IruTbLRJGLPUP206iQ9B31cBALDr5k4ndsRtg0VlYjq5KaFB16OShBq2146MXdO2JGLThmdTjpDQoCU5rD/ZuskEzR51t2SMKdNJZ7YDAKAwc6STQwfDcBeNjs00xsGQUdJ0kkwSZEboKBwsNy9oco/UaTPEhHQi9bdJJWlMzdXcPtXmrdnH9fzuS7SSfZzGlOkkl+0AACjRHOkkjSBJcOmTTtJRVvJKWNyMps1YLjX4F7pXTT3ujmlMVtLC6UnEUUFk2mYYU7Zq6l4CAGCPzJNOlk80MaUZ8Oox+OBLJ+qRs086sU81lRxZjuZmmsE4ncCYdtyd9h7HtOtnpZWMWRIksUPfNVteS9JJnOqW2iSUua3W9pV5ld5H3UK1mu3nqIb0+AIAMKW50slaM+zVA2T77dRmnqNPOjHzCm0lzXL/EpmwSSNIz3TSMSUz0Xz3X4TtATObEn9fR7TzUuZbva0mnWRr0F2qhd3vqLM5RiYttca3ao4v6AAA8HjedBJ/F6S5reMed6cTrRkFo3hRTwlUw2qzXD3OjXwzpZN8VYkF/gqu+d5MdKMq/SqMLAnbTVbI/1pTK5lqSntJOiSdfQmvajdq2txUog9QpTnK80wyAQAwZzrRUxpyW+dWO4z1Syd6KK0HvPBUvdxUbqXj7njJSN9Bfes2u92a+XJud53R9E+UHnLfSon6MLdCcmfHszMoSfKQXkqO0WM7wTPm3pNfkps48cZ1FwAAk8ybTtTH5TBWxbcM0nSSHbzbO0T1F1biW0VSef5DeTLuTpQb7I02c0yqtnc6Ubsp3+Q1t3XmSSf5rLAn6WRcJwAAMMnc6cR8WDe3AHqmk/auR/hlHxlBzfJ8mEjG3Ylyg73WzvR0rDCjZrtHluv+sbdpZk8n5k6QTkJ1dbaXkmOkXjVdOul1jwwAgL7mTyfqRkn6Ob5vOjFfCmnH4Gh5xyiYjLuPVQ4INa0t69fKbEez0OyR+frFAsW7mRn1JUyYJcl3RNp5i3gFe1C600lmN82SSekkbVW1yokj+cMEAEBPC0gnaqah+3P5pHQS3R/R6/T48kc67iaTH9l7EMkMTT3o2q9uiK4GTCG6DaRnSjo2mnZgwsydGGPSSUe3tP0/MZ3kW9URIgEA6GkR6aS9/yLD0vTpRI1zUQhQy7tmMnLjrpk7sZMWZgSN96hjzF5IOtGVJ11hEkayOfVa1377vRO1j+7ZyXd2al3TOY/TLJJbkuaqrsMEAEBPs6QTAACAnUM6AQAAZSGdAACAspBOAABAWUgnAACgLKQTAABQFtIJAAAoC+mkUJfPnw9l48r7UTl3TpftO3d0MZVcuvieLv/69b/p8sXnd3S5fuWKLl/ce6CLqfn6tWu63PzsI10ubF3Txa586xNdNi5e1uXLW59E5f49Xc5f3NTlkw8/0OX2F3d1+cuf7uiyvX1Ll/t/eaSL2UEAwB4inRSKdEI6AYB9i3RSKNIJ6QQA9q3FpxP/P6Pn/rSv/5/Xm//mPPuXjedj/ubLQurcM2ukE9IJAOxbO5JODh46mPyNmDqO6HSiHyfrT8f//Rfzd3ZyCUlUUWbsCnuNdEI6AYB9a6fSiZ26OLu8dGh5OU4k0d+WS/4k3hRmiBozvGR3ffOvfw5l4703dVm/dEmXY789pcs7753X5cPz7+py5t2Lurz28ildLlxY1+XcH/+oy/N/f1yXrXMXdVk/84ouf/jjeV0unbuoyz+++A+6rF++pMutq2/psvrWRV021y/rcuOzT3R56/dndHn9N/+ky8u/Pa3LXx59o4s9AACAvTN1OqnCRzPPUaUKSSFV/qge+xXWdPgIr1o+a+dLmsdryzLtEYcGnVqiP8DbrCBPjZt6af6W75L8wV61pKlf3WkKS5rdqVStkokZaW38F4Pr1VTiiV41NdIJ6QQA9q2p04katsOIXg/ALkmEsb/OCnZ0d8O2TSeizRZd6UTVduvsWpxEommY1NqRpsIqlDSPow3pW0tSW5uZ/G2jZgX3wtCSs8sqXYWXTDEh9B+e/B+u2KUK6YR0AgD71vTppBqMw7i+tnzoxIlqUuSxH5jrsbyZyWhH92aJTScykFfzImEgH5NOOm/ExOmk/W5sOm/RMUlj5jzctvxG/XxPtWDtyMETL9ULJYRp7eRNHN3GZCbSCekEANBlhnTSjLtnl+s5Ejdsy4yCGqqbbCGZoDOdtImnK508ltsxaebI3tkxQUTk0om+0RP4fWnbX/0YWtiGsLALomlAs13VIbMhnZBOAGDfmiGd1MN2NaNQf/1iea2Zb6h+brNC9dSJNmF0pxPJCmPSSZD9Moe+i1RTKaGtsHvuxL68We53Te5YLZ+VeSM79yPxKDzOTrFM5frlD0J5+H8f6vLOmTO6nL+0pcvFrcu6XFh/R5fN81d0eeftd3W5fvWyLh9ee1+Xi5tXdLm8dVGX99//QJf3zm/pYlbevLyly9raBV0e3r2hyyc3P9fl7bPndLn2wSVdti5s6vLW6/+sy9Wrn+liexwAUIxZ0okfzg+qyRL3uHOoVrMdnemkvbPTfoejmfOo76csN5WohKH4DelbP81qOrhUcyS5dOIbkwsT1UzJQZkscTHlkKQl3Yyqze3LQ+d03ofqi3RCOgGAfWumdBIP5/5Lo+1gHN1niaYlbDpp6akLuc9y6MRa9L2TWteXOcJ3V0XTBrWhI8s62fhAE6UiIZuIfinJp6XoqWb15ejWkt+imfKZHumEdAIA+9Zs6QRjmK/UzIh0QjoBgH2LdLJg0XTLHEgnpBMA2LdIJ4tT/3LQvN84AQBgnyOdAACAspBOAABAWUgnAACgLKQTAABQFtIJAAAoC+kEAACUhXQCAADKMnU6+Ze3X9Pl0+07utx8/4Iun9+7p8vLL76my+PH3+jy6m9e1OXhN491efnF/6XL1euf6WJbGfvyz3d1sU9/81CXO39+oItdeRoPH3yuy6urb+jy7unTunz6+R1dLm2t6bJx4bwuL556XRfTkydf/q0u165e0uUff/d6KLa5AACUgXRCOgEAoCykE9IJAABlmTqdvLdxSZeN85d1uX31LV2uf35Hl9XX39bl4Zc3dFm/dEmX85/e1eXy1lldzvz+NV1+989xOf2mLq+t/kGXuzc/0eWttXd1Ofm/X9flzbff1OXC2bO6/O7UK7q89vszuqxvbUXl8iVd3ruwrstHn36ui+nns3/4vS6rL/1al9tfPdbl0oU1XW5/8aUur/2f06HwP+4DAMpEOtm/6WT+P1UIAMBOIJ3s33RiDy0AAGUgnZBOAAAoC+mEdAIAQFmmTiebF8/qcv7Sli4P797Q5fM793R5d/28Lts3t3V558wZXR58/W+6fHbzI10++uCyLjc+/lCXdy9s6XLl8vu63P/yz7psbq3r8sd3LupituvimC4XL27o8vHNW7rc+/K2LmtrF3S5fvWyLpsbH+jy/tXLulz78JouZ8+t63L75qe6vHn6D7qsr5/T5XzDHloAAMpAOiGdAABQFtLJ/k0ny2ftwQUAoASkk/2bTuyhBQCgDKQT0gkAAGWZOp0AAADsKNIJAAAoC+kEAACUhXQCAADKQjoBAABlIZ0AAICykE4AAEBZSCcAAKAspBMAAFAW0gkAACgL6QQAAJSFdAIAAMpCOgEAAGUhnQAAgLKQTgAAQFlIJwAAoCykEwAAUBbSCQAAKAvpBAAAlOXARQAAgJKQTgAAQFkOjAAAAEpCOgEAAGUhnQAAgLKQTgAAQFlIJwAAoCykEwAAUBbSCQAAKAvpBAAAlIV0AgAAykI6AQAAZSGdAACAspBOAABAWUgnAACgLKQTAABQFtIJAAAoC+kEAACUhXQCAADKQjoBAABlIZ0AAICykE4AAEBZSCcAAKAspBMAAFAW0gkAACgL6QQAAJSFdAIAAMpCOgEAAGUhnQAAgLIUlE7unXz2iWdO3bOLd9PmsaXY06sP7DqTbR6tXnr41RleWgkvVw6v3rXrDMiV55949mR1VCcd3ysrTzx76r5dOlzV/j5/pXp0/9SzY3dNumhAXJsrz1+pHoTdLN6kM/C7ZdJZBxRumnRSne7iO3neJ+mkMnU4WHQ6qYyvzb9k6nbOojoHVqKxaGtl/ODUe+jdzXRy79Qz7ansrGzZNebXppNJenfRwtTZYuZ9T0+DXaCvP+M6tjq47U6587PcRKLPwx3sz90/wYD59U4n7k2uBw9/pZjlula0kE6ObYaf7q4eDtHgaL1gd4R0cqzu2werT4dGNK3KCOuQTvpzo4Leltv0+AFvFqWmE7Oz9049P/3g7U6DXR7y45mAKyfHbH0o6aRqZ3vct07t3Mm/uycYsBg900lu5Kjf9vG1oL1s+YtgpXmhH9hOnaw+/6y8FF0y3JvH1RBdzdvPSX4s1FfDKic1A+SkoXFKcTpxtsJkSr3kwat1XKmjQHi2ufsjqSKOF3oupA4Qtp6YebnM6PglenYnvDae76mCVLrO4oxJJ+Gp6uh4zXGJ7uzk1myum+055j/Zh60kZ9FimHQyis9w2ajshV6/erY54d3jqp1+H680n4Pr/rH7Kw/sjqvBwz/lK9+hHR83UKkJleYQZxssh9g3VVcoNaxs1T2zMJ15yHSUOnbPnLrqrzZBdIXJ7ldUm39WncPJmvNLT8JabnPtLItfGHVvuH6GB8+ePFXtguur+qyLp2firDbmZAD2XL90kv/8UV/Qdapwj/3priJLdGnODEXyTlP1qGfbDFQvuXdy5dnmsbwtFyRJJ/WSaoxXkSJwq7XP6tfqeBHfpumqJ5KkE3WrSKZz2tcm6SSzzuJMSCd6OK+PdUc6adasHsu40pxO9ckWB99FygwMTTujT7S68fXC+6dWnmkeN/vuhxMVrfxCOxbWD9Idb7bSLtm5Hdfvu0j0nQx5v3c0WGeFzPGtO2Sh6SSMsk39eqG9zpjeU9euSWegfqGPKeY4LlpVc9JLanPSHn1OXjk1Np3YZNmsMObCC5SpdzrJvD+bS3x7qWqWRGlGrZZ7R0nl8raMLwf1W0gNHtUEjDxOmzWHJJ3UI71LFTqI5KZJwjyKvwfULmxfLjXm69GShfXNnfirJ/puTtedna7lc4gPYiVKJ+qp5hzIjF7RmnIJ9tfNk9XEhD5JJCgsVCad1PnDBHE5t5vlbrWVk/XC6nEzKrTtVGva/c3veHh59ZFXxtQd2/GuAcmklux7No4CNp2YGro2NBc/+qqMkr3O9E0nyX6ZQy8ntlm+WFthskYaE3VjfU6q3m50ppP2tMmnk8yFFyhT73Ri3x4j9Q5RoUTez7Hq/ZCOXtXK7TgRpZOIqtxVov/NtGoeSTpp7+xkvjCrQ0mYEdHzJW06iX7xp6MeJUkn6s5O3R6RSyf5dRakfzppjs6kdCKXS/9pVY3QXjVyVGfAgofqTDqpm2Ev2XKShwchEMu/dSV2VOiVTqJBpRJtd4d23GQIvTw6rHXbOhrckU50DbbCBaq6SyJjzDdv2nTScejVj/UVacFXG6XakXBc6ndBy7XBnpNhtaT96XmYSydSW3s0gSL1SyfZi1r8tndn/4RUbgc2/wZTlzmdTnIXZb/+1kozklWPc6vNI04nzS0SP2kRzXko9fLDVT6oX2jTSffcSVacTppvxVYRR6cQXU/XPMrkbU3PngntwTLHV10Ee6eTZ09tncr9GmQ83ixAkk6kSeqsrperYbj6OkV7Zb+yYkfo6CWZ/c3veHh59bWV5Hxe+I7HTVWLe8ydTEwnqgb7Zl+s5OOQfXbWdKIOfbty95IFat5HuVRnzsnKHOmkzta5DQEl6ZlOwqcHdfVpw75XXa1WVtr7LNUnAHtVTS5Y1Zvq+TZhxNeO7BD1rPrGSft4cTITG+ZLr+OWN7/aM/57J131CLtCJboTlCyX3+up2tCxzsJc0f+/hT5S1WO5CLYnwHTpJAw5ydHvGFNnFqcT3/LmdK1aLtvS263GD/WNk/ZxOirMkk7CyGR3c9E7bg7TqOoK/zs71WGVIVCGw44G59JJdGJUjxc7+NUfS7z2rMtdZ2ZOJ1Ft1WObRXxV0ZK51EnXq9qcdmNDnxjheydqH6v3i32vVTrTSdUP+sILlKlvOqn4t0HDXHr8RLR+U/mLYC13pavE41D00URvq1lYraAvoLYN80vSSfy7xNHAL6miuZMi92LMrRn1qlzImJxO0u/BLB1+dTN/N0d9K9auszD1TYcgHjPq38l6IjfA9xgb6pPBR2G3UG3IXq/nFO1CciL5kcmLruDtoFivI/tuR4UZ00nzrnn+7R3b8aDdQf0G9JHCk3dZR4Oz6UT36uJ/Zyc6ZDZZ1qKLg/xYv3Al/Z2dpo5ov+q62t/ZCWdjvbB5yUKomuO8mNnT9pDpUFLx/yGePZFG8T7W+6V/tB8AgNJMk06AMdL0iX1LxZeBam61fBcN/+hgPyCdYEFIJ6i19ymG6js9u9DOFQEFI51gQUgn+1t7Y8jfbrBPD4C+4fUdHb/D/aBBHh3sO6QTAABQFtIJAAAoC+kEAACUhXQCAADKQjoBAABlIZ0AAICykE4AAEBZSCcAAKAspBMAAFCW/ZJOvv8ryoQCAEAhSCeUugAAUIgDX+4P6WBMMcV2GQAAe2S/zJ0AAIChIJ0AAICykE4AAEBZSCcAAKAspBMAAFAW0gkAACgL6QQAAJSFdAIAAMpCOgEAAGUhnQAAgLKQTgAAQFn+PxzeL+yk6QnWAAAAAElFTkSuQmCC"},8526:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,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"},8776:(e,A,n)=>{n.d(A,{A:()=>t});const t=n.p+"assets/images/simulate-uplink-a8a05771d631e1ef8d5b957afc848c0a.png"},8386:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJUAAAAdCAIAAAAsI7mtAAADDUlEQVR4Xu1aO3LjMAzNMXy3VPZZXKjUDVy6yPgCblW6TZc6jjOTNM5WLpwFv3gAyUja7G7MGWLeTGQKxO8RUArefTapWe7cn8vl8vb2fjwen5vcthBHxBTxxfzRD1p9ef91Ol9PH58NN43zlZgivhyFhj/i05CXqjbcKogvYs3zR2S2zqsM5yux5vmjqapfN9w8iLXGX8Vo/NWNxl/daPzVjTx/+24Bsto86W0/jKGH8Pp9qjAR3k7/sF0tlrvHVCGP181ysR7EIlXsfvuaaJbxtLv/TuQBRf5iNI+U29/wVMBhPfN82LMF8Qy9KuVkzHYd8F/4G1WwGOfvG3lOwTzj5jDNaJQvMa1AOVTMHz17EQ3aHcLINS5tywodr6b2mhCDBFZALY0+Uzj1NgifCRlecI0TuDuYn3ws2M56yB6vTBhcMWcq2henjau33gI9EEw+PBlVWDEY589k7jcY9yFuTsxV3K27MkEQPkQ5hPN2vBoSCYGmyhI2vaivXQd3Zj1YwAPO/Bk7IveMxzH+oMSF6jkyvPd9h0SGZ9F/GJXwXuQvCgcqDqmpi7MoCo0RcLl1wrAFKVFq9Eq1YJk/PW3YlDwH4CLLn7aT9ajTOaX9F19Fg6V1AXCHCkqZTIWMivwVekiKtSIKRJ44yhhNUgVOBl/xeAmiapcpXGLQI6Ywjz9tJ4lcGQF33OLagvGix4mmJ0lZhadkuXN2xvjDCQC0IybwlyTMplT/pcUS0FWISI5zLOhs/tCO0cmEhPXRZkt9ptajIxF5uf/k6YwY5w8Gd3wQmMDfn3z/CrA9KgthTdkvSm6Mz+PP2h/7/jn7hbBtr4Ts4LtlmwzXfYTIK5oVvIIdiSn8gd1cp0/hz6sFwUPg18Mu/PTmW03psDtXFCfcQzP5EzkW/v8MW6KoxlruNjFCPTOdrDZD9A5hdz2682nyoGKJBczz1+CRjOVxqDn5j9H4+wJyJk9E4+9HgUN4Pnkfjb+GOWD+2v2X+oD3X9r9s+og7p+1+581Ib3/6Shs96+rkMz96yb1ym92A8ZkDWqpFAAAAABJRU5ErkJggg=="},5362:(e,A,n)=>{n.d(A,{A:()=>t});const t=n.p+"assets/images/uplinks-uplink-content-537f13f734c30722c47360baad6ba1d8.png"},8453:(e,A,n)=>{n.d(A,{R:()=>d,x:()=>a});var t=n(6540);const i={},s=t.createContext(i);function d(e){const A=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(A):{...A,...e}}),[A,e])}function a(e){let A;return A=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),t.createElement(s.Provider,{value:A},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/413f02fd.eb517c39.js b/assets/js/413f02fd.eb517c39.js deleted file mode 100644 index 762d42d1..00000000 --- a/assets/js/413f02fd.eb517c39.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3521],{5266:(e,A,n)=>{n.r(A),n.d(A,{assets:()=>r,contentTitle:()=>d,default:()=>c,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var t=n(4848),i=n(8453);const s={},d="Devices",a={id:"platform/devices/index",title:"Devices",description:"Everybody* read access",source:"@site/docs/platform/devices/index.md",sourceDirName:"platform/devices",slug:"/platform/devices/",permalink:"/iot/platform/devices/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/devices/index.md",tags:[],version:"current",frontMatter:{},sidebar:"cloudSidebar",previous:{title:"Server Configuration",permalink:"/iot/platform/administration/server-configuration"},next:{title:"Downlinks",permalink:"/iot/platform/devices/downlinks"}},r={},l=[{value:"Overview",id:"overview",level:2},{value:"Device Properties",id:"device-properties",level:3},{value:"Alerts",id:"alerts",level:3},{value:"Location",id:"location",level:3},{value:"Device Data",id:"device-data",level:2},{value:"Uplinks",id:"uplinks",level:2},{value:"Simulate Uplinks",id:"simulate-uplinks",level:3},{value:"Downlinks",id:"downlinks",level:2},{value:"Config",id:"config",level:2},{value:"Settings",id:"settings",level:2},{value:"Organisation",id:"organisation",level:3},{value:"Single Device",id:"single-device",level:4},{value:"Bulk Operation",id:"bulk-operation",level:4},{value:"Device Tags",id:"device-tags",level:3},{value:"Security",id:"security",level:2}];function o(e){const A={a:"a",admonition:"admonition",br:"br",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(A.h1,{id:"devices",children:"Devices"}),"\n",(0,t.jsx)(A.admonition,{title:"Required roles",type:"info",children:(0,t.jsxs)(A.ul,{children:["\n",(0,t.jsxs)(A.li,{children:[(0,t.jsx)(A.strong,{children:"Everybody"})," read access"]}),"\n",(0,t.jsxs)(A.li,{children:[(0,t.jsx)(A.strong,{children:"device-admin"})," write access"]}),"\n"]})}),"\n",(0,t.jsx)(A.p,{children:"A device represents a single physical IoT device that might consist of multiple Sensors and Actors."}),"\n",(0,t.jsx)(A.p,{children:"Each device has a Device Type that defines the type of the device, e.g. how data is parsed, displayed and forwarded via integrations."}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Navigation Devices",src:n(1621).A+"",width:"735",height:"227"})}),"\n",(0,t.jsx)(A.p,{children:"When opening the device page there are multiple sub pages:"}),"\n",(0,t.jsxs)(A.ul,{children:["\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#overview",children:"Overview"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#device-data",children:"Device Data"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#uplinks",children:"Uplinks"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#downlinks",children:"Downlinks"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#config",children:"Config"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#settings",children:"Settings"})}),"\n",(0,t.jsx)(A.li,{children:(0,t.jsx)(A.a,{href:"#security",children:"Security"})}),"\n"]}),"\n",(0,t.jsx)(A.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(A.h3,{id:"device-properties",children:"Device Properties"}),"\n",(0,t.jsx)(A.p,{children:"Device Properties are bound to the device and can be manipulated (read / write) by the parser and via API's."}),"\n",(0,t.jsx)(A.p,{children:"We are planning support to Edit the properties via the User Interface as well, deletion is already possible."}),"\n",(0,t.jsx)(A.p,{children:'See "Edit Properties" button below the property list:'}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Edit Properties Button",src:n(9365).A+"",width:"149",height:"45"})}),"\n",(0,t.jsx)(A.h3,{id:"alerts",children:"Alerts"}),"\n",(0,t.jsx)(A.p,{children:"The feature is currently not supported."}),"\n",(0,t.jsx)(A.h3,{id:"location",children:"Location"}),"\n",(0,t.jsx)(A.p,{children:"The device can have a physical location. The location can be set via the Web UI, APIs and by the parser."}),"\n",(0,t.jsx)(A.h2,{id:"device-data",children:"Device Data"}),"\n",(0,t.jsx)(A.p,{children:"Device data lists all data records returned from the Parser."}),"\n",(0,t.jsx)(A.p,{children:'The table is configured via the "Data Table Config" in the "Device Type".'}),"\n",(0,t.jsx)(A.h2,{id:"uplinks",children:"Uplinks"}),"\n",(0,t.jsx)(A.p,{children:'Uplinks are raw sent messages from a device that were received and tried to be processed by the parser to create parsed records ("Device Data").'}),"\n",(0,t.jsx)(A.admonition,{title:"Parser returned nil",type:"note",children:(0,t.jsxs)(A.p,{children:['Not all uplinks return a good data result, then the parser result is "Parser returned nil".\nThis is ',(0,t.jsx)(A.strong,{children:"not"}),' a general error, but a hint that no device data could be extracted from the uplink.\nOften this happens with status uplinks that do not contain user data but can be processed by the parser for meta information,\ne.g. battery voltage, that are shown under "Device Properties".']})}),"\n",(0,t.jsx)(A.h3,{id:"simulate-uplinks",children:"Simulate Uplinks"}),"\n",(0,t.jsx)(A.p,{children:'For test purposes, it may be useful to simulate uplinks through the platform and let the parser process them again. For this purpose, the "data" part of a past upload can be used, as shown in the highlighted part below.'}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Uplink",src:n(5362).A+"",width:"1200",height:"918"})}),"\n",(0,t.jsx)(A.p,{children:'The copied data can then be pasted in under the "Settings" Tab and send to the platform again for processing with a click on "Send Data". This data then appears again under "Uplinks" with "http" as datasource. Downstream processing, including any integrations, is then just as if the data had been sent from a physical device.'}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Simulate Uplink",src:n(8776).A+"",width:"842",height:"552"})}),"\n",(0,t.jsx)(A.h2,{id:"downlinks",children:"Downlinks"}),"\n",(0,t.jsx)(A.p,{children:"A list of queued and sent downlinks."}),"\n",(0,t.jsx)(A.h2,{id:"config",children:"Config"}),"\n",(0,t.jsx)(A.p,{children:"Requires Trait:"}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Remote Config Update Trait",src:n(8386).A+"",width:"149",height:"29"})}),"\n",(0,t.jsx)(A.p,{children:'The config tab is only displayed when the Device Type has the Trait "Remote Config Update"'}),"\n",(0,t.jsx)(A.p,{children:"Allows to see and edit the device configuration."}),"\n",(0,t.jsx)(A.p,{children:"Config properties must be updated by the parser, else the page is empty."}),"\n",(0,t.jsx)(A.p,{children:"Updating configuration only works for NB-IoT devices yet (10/2022)."}),"\n",(0,t.jsx)(A.h2,{id:"settings",children:"Settings"}),"\n",(0,t.jsx)(A.p,{children:"Edit devices Settings:"}),"\n",(0,t.jsxs)(A.ul,{children:["\n",(0,t.jsx)(A.li,{children:"Name - User friendly display name"}),"\n",(0,t.jsx)(A.li,{children:"Address - used to identify the device when receiving Incoming data"}),"\n",(0,t.jsx)(A.li,{children:"Serial - Serial number, provided in device import"}),"\n",(0,t.jsx)(A.li,{children:"Device Tags - see below"}),"\n",(0,t.jsx)(A.li,{children:"Description - User friendly description of the device"}),"\n",(0,t.jsx)(A.li,{children:"Device Type"}),"\n",(0,t.jsx)(A.li,{children:"App - Deprecated"}),"\n",(0,t.jsx)(A.li,{children:"Datasource - allows to assign additional Pull or MQTT based datasources"}),"\n",(0,t.jsx)(A.li,{children:"Parser - Parser to handle uplinks and generate device data"}),"\n"]}),"\n",(0,t.jsx)(A.h3,{id:"organisation",children:"Organisation"}),"\n",(0,t.jsx)(A.p,{children:"Each device belongs to a zero or one Organisation. There are multiple ways to move the device to another organisation."}),"\n",(0,t.jsxs)(A.admonition,{title:"Required roles",type:"info",children:[(0,t.jsx)(A.p,{children:"admin, org-admin"}),(0,t.jsxs)(A.ul,{children:["\n",(0,t.jsxs)(A.li,{children:[(0,t.jsx)(A.strong,{children:"org-admin"})," can move the device between different Sub Organisations in his Organisation tree."]}),"\n"]})]}),"\n",(0,t.jsx)(A.h4,{id:"single-device",children:"Single Device"}),"\n",(0,t.jsx)(A.p,{children:"Go to: Configuration \u2192 Hardware \u2192 Find and open the Device Page"}),"\n",(0,t.jsx)(A.p,{children:"Change the Organisation"}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Change Organisation Control",src:n(3979).A+"",width:"505",height:"58"})}),"\n",(0,t.jsx)(A.p,{children:"Press Save"}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"save-cancel-buttons.png",src:n(9773).A+"",width:"192",height:"46"})}),"\n",(0,t.jsx)(A.h4,{id:"bulk-operation",children:"Bulk Operation"}),"\n",(0,t.jsx)(A.p,{children:"Go to: Configuration \u2192 Hardware"}),"\n",(0,t.jsx)(A.p,{children:"Select multiple devices"}),"\n",(0,t.jsx)(A.p,{children:'Click "Bulk Operations"'}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Bulk Operations",src:n(2563).A+"",width:"157",height:"51"})}),"\n",(0,t.jsx)(A.p,{children:'Change the Organisation and press "Bulk Update"'}),"\n",(0,t.jsx)(A.p,{children:(0,t.jsx)(A.img,{alt:"Select Change Organisation",src:n(8526).A+"",width:"261",height:"244"})}),"\n",(0,t.jsx)(A.h3,{id:"device-tags",children:"Device Tags"}),"\n",(0,t.jsxs)(A.p,{children:["Tags on device level are meant to group devices inside an organisation. Use cases can can be external ID's, Installation location, data export targets, etc.",(0,t.jsx)(A.br,{}),"\n","Some future plans are to filter by tag in integrations, display tags in the device table and use them for search, grouping, etc."]}),"\n",(0,t.jsxs)(A.p,{children:["Currently the most important difference to device properties (where you can also story lists) is, that the parser has no write access to tags.",(0,t.jsx)(A.br,{}),"\n","Also a device with too many tags might get less handy, where device properties can be added as needed."]}),"\n",(0,t.jsx)(A.h2,{id:"security",children:"Security"}),"\n",(0,t.jsx)(A.p,{children:"On the Security tab, all security related information about the device and it's connection can be found."}),"\n",(0,t.jsx)(A.p,{children:"You can find information like:"}),"\n",(0,t.jsxs)(A.ul,{children:["\n",(0,t.jsx)(A.li,{children:"If DTLS is enabled for the device"}),"\n",(0,t.jsx)(A.li,{children:"Certificate fingerprint of the device"}),"\n"]})]})}function c(e={}){const{wrapper:A}={...(0,i.R)(),...e.components};return A?(0,t.jsx)(A,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},2563:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJ0AAAAzCAIAAAACUp0fAAADWElEQVR4Xu2bzW7aQBCA8zy8QF+gL9C+SI6oufTaQw7tjQfgxKU9cOQFWkXKgZ8GVeWAACEiVflRW6mq5M7u2OPZ9cIahA2ezicrMst6Pey3M+tE4eJZkciF36CIQL3KRL3KRL3KRL3KRL3KRL3KJOJ1sVhMJpPhcPhZaRS7vILU8Xi8Wq0SpTmAVPi5yytkqkptHHGvUH79i5SzJ+4VeyjNQr3KRL3KRL3KRL3K5ARev3z/+enmwW9VjkrdXr8uf7faEziuekv/PeV41Op1MHp6+vX3TW+JauGl3+MwNvPL9uzWnK077Wl/479/Ykx4dUdVn9ePNw/g8vWHGap98fZu8eOP3ynnsX9t3ONxOXj03+fs5dV0ppFjnQ9mNGtdz+/91vqoyStKxQPV7pSaWK806TFb5b3CdPMO1nFnxHscif/BK5cKRyxTEe7V5C7O/m2XaYC5667NScgr9GyljUTIOgnAQYx4GyeObLFDOWUDWi4H8w402mupA768H0zpw5po8/CcakGjmf7ddTZIHmHxvuWp3GtRKjw6+Z0CMK8wF9naL+nVzFQxXcI5lMnGGU91mpWEs4mTTo20vNiiWXcKVzn3csKj+PPRcB3k57Q42Nral2q9Hio18fZXclnK62BWyFQL9XfIFhDPqoTEOCkOc43abL4Gcog6BL36qrJ4nHYKI7wKy1KhV3jcPVRq4tbhfB5LeHXWgUN4puASe63nNS0S6YD5Ye/oeeWFd7dXZzVkdcj1ncVDwwZijlOVV1AID0ev3qfb1Z5SE88rKSzhddofzbf8XlFif+XtZvB8ljncK7dyhHwt3NG/qhxVeX357ttVb4lq95eabMtX9iFtJgW9buyUFRWmGeAuF3pp99fMVr4Rmq20MK3cKzuP7a/2FuH9dbvXLWUmQiVeQSemKardX2ri7a/ux8ZG++y6zWtWxAIF2bikkd3C2571s4rKCiaPJB3crcMU0rTTpUqbXrXjeZhiC3pltT1QMKJU4pV2VkjWg6SeAq8ON5xKvIJL/JOh/8Y5o15lol6V80e9ykS9ykS9yiTuVf8vvInEver3OJpI3Kt+76qJxL0+6/ckG0vEq9JQ1KtM1KtM1KtM1KtM1KtM1KtM1KtM1KtM1KtM1KtM/gEEExtuOtr9jAAAAABJRU5ErkJggg=="},9365:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJUAAAAtCAIAAAAoWb4AAAADZ0lEQVR4Xu2bz4vTQBTH9+/JP7D/gP+A/gP+A8oeF09608MeFBTWo0tPXgTZ2xa8eJEKvRS1FYpUF/oDxS1FYSnEb2YyMy8v0zZNO2sG3occksmbaTqfvDcppAepEDMHvEGICvEXN+IvbsRf3Ii/uBF/ceP3t1gsBoNBp9P5IDQG6IAUqKGmPP4QgdDJZLJcLvk54f8BHZACNVShxx8kI463Cs0AaiDIHnr8wbBkXmOBGgiyhx5/KLW8SWgSVJD4iw/xFzfiL27EX9zchL83H3+fvf/JW4V9ENxfuzdPjj9hg0V+TtiZsP5+/Lq+f/Zd+8MODnlEbXrDpDXOdqajo+P++ZSfbw6zdj85Gc14834I4u/5xRTC7r78dvior+XpDYda5+O3aurXAD2k42mPn3f+HFfnJ77IdHxKhjpqX/HzIcDlBXNGCeLv8OEXO19w+fnyLzYt1W68D8Ojp4gnYI2/Ydfte2P2TdT+sNRphVoecg65SBVuXgs9elKSScNuoX5CD0kyPnHUX1bNVAqisX/ezrJcZ2RW5fIRXDXutnB2jNuCtasPNVdihk1aIxU5fOeGyu4Vdcp8l1JH8qXqrAJB/AEIwzXB2b1X+fp359kQ61+i6iqPLuPxR9NLfeeCPxZAWeXPjJDqcm1i3ICZPzetLka5t43qdlH6iQCSf8RfueOqa65KcH96B9vtp1v6M7dwPmusIvH8Syv5cw87ZCpLHaFNH6r8s+tlHlbIJzN4sdHvz9ux+BFbE8QfyqOeel0/YQ7brvWTtWznz94K1hnzV6hdJkf55GqvpNK6Mav6K3XUl53UfbAK4o8+v7y4mCHtsGHHNiKA92F4/ZH8c/NVyZ+rn6SxRv7lqspzXdFfuaOBX0NFgvhDnsHQg9eXt558pXccDvHLAblYJ/9UGu2+/pFGl3MqM1atf/l+FqOV+H5xVvHn7WipV0iD+LPM/yxhUcvDDj+9hsL6Z74YfXjz1E/Ta+3zJ2nkNdN8nAtWczpyD702ml6eZ21LbVXk6yXvmIfZcbYlrL+UrIXt3pyfazz1cuImCe4vVQo3F8xGIv7iRvwJYRF/cSP+4kb8xc0Gf/L+bpPZ/P6uvD/fZDa/Py//X2kmVf+/ksr/xxpJ1f+PCREh/uJG/MWN+Isb8Rc34i9u/gGIyK4erI9gTwAAAABJRU5ErkJggg=="},9773:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAAAuCAIAAADx8IGiAAAELElEQVR4Xu2cP08UQRjGr7G18VvwBSytbCz9BH4DQkVBYWtBY2JxNgjmqE1OOgkJiRYKCQ14B8aLXCyAjfwJ2BCS8Z2dP/vuzOwx587F9XiePCF778wemfd+9867l+y2BATVUMsNQNA4AkBQLQEgqJYAEFRLAAiqJQAE1RIAgmopDNDV1dXBwcHW1tbnaRetkVZK63VTIMT59s6nR0/e33vQbd2/46YkUCooIW6OggBRNimtx8fHNzc37tjUidZIK6X1OgxRsoCOY0qIz1AAIPpGUk7d6FSL1kur5hH6wvkZhCktPEsiCBB9He9C7eGi9dKqeQTlJ2hKC8+SCAJEnYEbugNyVu3nDlbmWRIAyAoARZpnSQAgKwAUaZ4lAYCsAFCkeZYEALICQJHmWRIAyAoARZpnSSQE6NWHk5n5r1++/1Yv6YBekumY/r7bPi/Nbp4AUKR5lkRCgBQuVQA1n6FUAA2XV4dvOvHxf+O5zWvRP/TjEeZZEpMG6OHzvh1SMI3UxdqinjkzP3B/M5+wEgJEpzus6ODyqj8/YPnpGp1t7vkT6rv5AImcoZ+nMhVxAEl6Ztcv9Kvd4dpJaXjSSgVQ12NoLHr2NqhOn2dzJrLUv1xy5yRwYwF6/OLbs9c/uJ++HEQDtB+A5mQ4a05v76pp6sCMLg4zeXTU1tNCbxKhhAB1GUNkeRBHz4jPNQdLSU+Qkd7KYU8FGXOtlUszVcNXlDTz5tX/6Fab99ZKCRD10VR1glYttntOWdn6vr9zZesDDcTuQI3KaZ0jM7qfFy1GlQTOfZMYpQWoaxgS8fQYJvx4t7WQ9fReJonJ5yikFCLyWG92kh7LTSYPKGLwWurrac0EiO9fjlRL5EZ9SUqqGiCqMXm8qDqmaNFZOsKCY2qCAEX3zsTB9caCHy+ZILAAWdosEGbUugwlwZRPm1qAlCRGFgK7N1mwGDeqFGnsChd7XLTSAmT7nmBPXeXqCpSTYeUDZMjwEWR7n1JejaYcoGJvIno4SboyqdGdjgHFklRDCQFyuuYxGKr6XO3Wo45HAuRXoEBVq/pHEeZZEk0C6KhdQGCuyHhDY3ogKbmLDdqLdqeTVeovqg5XKoCC11zxDOVNMfto86swjkWpB/IAUv1yqQeSEd5i66EmAvT24y+/fVamodsAUk203oPs9XwR7AxsBdK/GPGqwy7WWD80hhICFOyaq+K+S5uORmQhO9OBy96oCiSPi2su1jtbqVMaCJC6zhphmuCe0ySlAmjqzbMkEgL0vwsARZpnSQAgKwAUaZ4lAYCsAFCkeZYEALICQJHmWRIAyAoARZpnSQAgKwAUaZ4lEQQINxYK3FhY4agbC3Frs8CtzRWOurUZD1cQeLhCyLEPVxB4vEsuPN7FerzHu0BQvAAQVEsACKolAATVEgCCagkAQbX0B/LkACnqSSMXAAAAAElFTkSuQmCC"},3979:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfkAAAA6CAIAAAA837cdAAAFVElEQVR4Xu3dv27bRhzA8TyGH0hPIiBjNPkJOnToYMgCumQLsjQBZEFbO7VdUgg0ogwtEAgZCrS1rSQo2kZBDEOF+uP94/FEnSSWkUj6+wFhiGeS0fS98zm2H6wAAG33IBwAALQOrQeA9qP1ANB+tB4A2o/WA0D70XoAaD9aDwDtR+sBoP12aP3NuNexHo2vw0//X9ejXud8Go5ulb6rwf63AcB9tK31aVJ74xt7ejnoHLGw8mY+w2QDAK0Xb/31+FFncJkfGvV6oyP1ltYDQCnx1k8H66t4WdqrLZfpeWcwSrd3VPrTWUHpjUfmAvVFgB3UXxmoWE9Hek/IDLrJI93M0Qpv97aS0unH6768E8OOqGdOzVtiegBw70VbX7iOtoNpYf3amj13Ff1g/91OD7rXWdnVoG190byi+be79+O/DfvP+c+0c0nBlyYAcN9EW1/YX4msW9ebhkpP83v6fvf9FXdRrG3r1cW5qWWX2+Ua/x2aN+xvNB1z0wkA6iHe+oJFsUun1/r8lGBa793rGl0Q63yL9UbNHrfTegDYLt56vWmerdnV3ohpq9f69LXtqdvDkexmO/KbF+brLda93vX2TXs4tB4AnG2tX9m1tr+XovitV4HWsu/NqolBDZ0PNi/MXYvdE8xjC263uzr5782ubfXQegDI26H1e6KtAFA3lbc+23sBANRENa13+y1mgwUAUCfVtB4AUGe0HgDaj9YDQPttaf1isZjNZkmSTAAATSDFlm5Lvf2Yx1ovl8o98/l8uVyGnwMA1JIUW7ot9fZzH2u9zAxyQzgKAKg9qbc03J3GWi/TAit6AGgiqbc03J3GWj+ZTMIhAEBD+A2n9QDQTuVbf3Vz92z8/svBH1+c/b71kMvkYrkleAgA4ABKtl6qvWPlg+KTewA4vJKtl0X6esp3OeRG/zkAgAMo2foSi3p9yI3+cwAAB1Cy9esR3/3wnwMAOIAKWj95+eHX326DQwbXK/95Wp/0T7rDq3AUANrhGyUc3TxeqILWS9lf/fLx5u2drry8kFN5sV75vVo/v+h2L+bhaAFaD6DNJOinp6dB1gsHI6pp/Q8v/r5+e/f6zSc55IWc0noAqEpQ9n1Dv6qq9f66Xo4ff/on8h91/OdEFLZeBk8M13fV+suh+cTDobsnObPX2kEZ6V4M+27kyt4lj1v7twCgPlzfS4R+VVXr9UJer+sl9F99ffXk+Tt3PH46r6b1l1LpvvmdDmmm9eska7fu+5m+JOmbF/PhQ5NyVX/7BHVj3/yVxPQa+xoA6khXvkToV1W13l/XS+vluL39V0b0x2A/x39OxFrrwxxLuNVpfg8nmwMy7lFqXW+emX6JYCYDRSYS/xQAaub4rdfr+lc/f5RDt17q/2z8Xn+srvW5fXl7QbBfL6em9d6GT7au91ufe75MEt7+DwDUSi32cF6/+aSX8HIcf12vku0v21nXA2i0oO8lcl9N67/9/i/Jvb+un7z88OT5O/2xotbrdfqG/fqirXl7e+Gg+cYs+/UAaq6w7IWDERW0PvhZqvF3f8rhjwQ/V+U/J8LfgTmxUfYG/W+xdocXafBT2dpczQGpbv+sYF2f8v4fDqEHUE963yYc3TxeqILW73v4zwEAHEDJ1vO7zwCgQUq2PvKjUvGD32kMAIdXsvX8rRIAaJCSrV/xNwgBoDnKtx4A0BS0HgDab9fWJ0myXC7DUQBA7Um9peHuNNb62Ww2n3s/hQQAaAiptzTcncZav1gsZFqQG1jdA0BTSLGl21JvabgbjLV+pXIvM4PcMwEANIEUW7rth361tfUAgBag9QDQfv8BocOQaFFPuXcAAAAASUVORK5CYII="},1621:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,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"},8526:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,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"},8776:(e,A,n)=>{n.d(A,{A:()=>t});const t=n.p+"assets/images/simulate-uplink-a8a05771d631e1ef8d5b957afc848c0a.png"},8386:(e,A,n)=>{n.d(A,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJUAAAAdCAIAAAAsI7mtAAADDUlEQVR4Xu1aO3LjMAzNMXy3VPZZXKjUDVy6yPgCblW6TZc6jjOTNM5WLpwFv3gAyUja7G7MGWLeTGQKxO8RUArefTapWe7cn8vl8vb2fjwen5vcthBHxBTxxfzRD1p9ef91Ol9PH58NN43zlZgivhyFhj/i05CXqjbcKogvYs3zR2S2zqsM5yux5vmjqapfN9w8iLXGX8Vo/NWNxl/daPzVjTx/+24Bsto86W0/jKGH8Pp9qjAR3k7/sF0tlrvHVCGP181ysR7EIlXsfvuaaJbxtLv/TuQBRf5iNI+U29/wVMBhPfN82LMF8Qy9KuVkzHYd8F/4G1WwGOfvG3lOwTzj5jDNaJQvMa1AOVTMHz17EQ3aHcLINS5tywodr6b2mhCDBFZALY0+Uzj1NgifCRlecI0TuDuYn3ws2M56yB6vTBhcMWcq2henjau33gI9EEw+PBlVWDEY589k7jcY9yFuTsxV3K27MkEQPkQ5hPN2vBoSCYGmyhI2vaivXQd3Zj1YwAPO/Bk7IveMxzH+oMSF6jkyvPd9h0SGZ9F/GJXwXuQvCgcqDqmpi7MoCo0RcLl1wrAFKVFq9Eq1YJk/PW3YlDwH4CLLn7aT9ajTOaX9F19Fg6V1AXCHCkqZTIWMivwVekiKtSIKRJ44yhhNUgVOBl/xeAmiapcpXGLQI6Ywjz9tJ4lcGQF33OLagvGix4mmJ0lZhadkuXN2xvjDCQC0IybwlyTMplT/pcUS0FWISI5zLOhs/tCO0cmEhPXRZkt9ptajIxF5uf/k6YwY5w8Gd3wQmMDfn3z/CrA9KgthTdkvSm6Mz+PP2h/7/jn7hbBtr4Ts4LtlmwzXfYTIK5oVvIIdiSn8gd1cp0/hz6sFwUPg18Mu/PTmW03psDtXFCfcQzP5EzkW/v8MW6KoxlruNjFCPTOdrDZD9A5hdz2682nyoGKJBczz1+CRjOVxqDn5j9H4+wJyJk9E4+9HgUN4Pnkfjb+GOWD+2v2X+oD3X9r9s+og7p+1+581Ib3/6Shs96+rkMz96yb1ym92A8ZkDWqpFAAAAABJRU5ErkJggg=="},5362:(e,A,n)=>{n.d(A,{A:()=>t});const t=n.p+"assets/images/uplinks-uplink-content-537f13f734c30722c47360baad6ba1d8.png"},8453:(e,A,n)=>{n.d(A,{R:()=>d,x:()=>a});var t=n(6540);const i={},s=t.createContext(i);function d(e){const A=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(A):{...A,...e}}),[A,e])}function a(e){let A;return A=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),t.createElement(s.Provider,{value:A},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4ddd2498.32ea86e2.js b/assets/js/4ddd2498.32ea86e2.js deleted file mode 100644 index bffce694..00000000 --- a/assets/js/4ddd2498.32ea86e2.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1110],{7366:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/3F-result-in-ascii.c89288d.619.png 619w",images:[{path:i.p+"assets/images/ideal-img/3F-result-in-ascii.c89288d.619.png",width:619,height:648}],src:i.p+"assets/images/ideal-img/3F-result-in-ascii.c89288d.619.png",toString:function(){return i.p+"assets/images/ideal-img/3F-result-in-ascii.c89288d.619.png"},placeholder:void 0,width:619,height:648},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABDUlEQVR4nCXOzU/CMBiA8f7/B4/eTSQSNHLQSDwoJhrR3fTAh4DuA9aObv0eHeu71qDJL8/5QUIqIRQXSiptdK20aZqDc9C2znuPKEkYzRhNJcNaEC2I4ljyXHJca4rI9qvAsWS5NdRILKrUGmrNztalYgkaj0fnF73BVX81j1S5YGTKixkvjmXFFJHtIksWaTwn2zUv04omvMok24gqE+UPsjUH8G3rjjsOALoQQvA+hNBYgWpTAjhwhw7aDlzX/Wu972zNkKHJge+sxtBQsHSvsJH5HyyrGN1/3vSi3kv0FL29TibPRb7cq43miRGZLNfo9vHsdHhyN+w/DK9Hl4PVx3tF4wKvd+SbkuUv4kcPHFiK110AAAAASUVORK5CYII="}},8207:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/Downlink-TTN-get-fw.b7f06e1.882.png 882w",images:[{path:i.p+"assets/images/ideal-img/Downlink-TTN-get-fw.b7f06e1.882.png",width:882,height:660}],src:i.p+"assets/images/ideal-img/Downlink-TTN-get-fw.b7f06e1.882.png",toString:function(){return i.p+"assets/images/ideal-img/Downlink-TTN-get-fw.b7f06e1.882.png"},placeholder:void 0,width:882,height:660},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAIAAAC+zks0AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAcUlEQVR4nG2MMQ7CMBAE/f9v0fAMilAgpAT7Ysu+27tFcYEAZTTdSJNIam35du8vcQYAdwcQESSTmW7PteXKM5KaSd1V1d1P8iili9h8xuQnN9nrfpwj/p3znEcTNfQBA789ctna9bI8ljUCZgrYR5JvSz7Nn8r84TIAAAAASUVORK5CYII="}},2571:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/lorawan-downlink-3F-answer.4bc9c29.1378.png 1378w",images:[{path:i.p+"assets/images/ideal-img/lorawan-downlink-3F-answer.4bc9c29.1378.png",width:1378,height:31}],src:i.p+"assets/images/ideal-img/lorawan-downlink-3F-answer.4bc9c29.1378.png",toString:function(){return i.p+"assets/images/ideal-img/lorawan-downlink-3F-answer.4bc9c29.1378.png"},placeholder:void 0,width:1378,height:31},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAABCAIAAABol6gpAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAKklEQVR4nAEfAOD/APLy8vDw8Pb29vLx8fH09O3Z2ea3t/Du7vHy8vPz86+eG6M4AoFrAAAAAElFTkSuQmCC"}},4513:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/lorawan-downlink-3F-downlink.80f3eb1.634.png 634w",images:[{path:i.p+"assets/images/ideal-img/lorawan-downlink-3F-downlink.80f3eb1.634.png",width:634,height:45}],src:i.p+"assets/images/ideal-img/lorawan-downlink-3F-downlink.80f3eb1.634.png",toString:function(){return i.p+"assets/images/ideal-img/lorawan-downlink-3F-downlink.80f3eb1.634.png"},placeholder:void 0,width:634,height:45},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAABCAIAAABol6gpAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAHklEQVR4nGP4+vXrly9fPsPAz58/ISLfvn379OkTALwKHKViCz9TAAAAAElFTkSuQmCC"}},9834:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/ttn-downlink.307b73d.1081.png 1081w",images:[{path:i.p+"assets/images/ideal-img/ttn-downlink.307b73d.1081.png",width:1081,height:370}],src:i.p+"assets/images/ideal-img/ttn-downlink.307b73d.1081.png",toString:function(){return i.p+"assets/images/ideal-img/ttn-downlink.307b73d.1081.png"},placeholder:void 0,width:1081,height:370},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAS0lEQVR4nEXLUQqAMAwD0N3/lB5AUBHWpNsaaUEtPPKRtO3nJZCKiDLnFEmttT7urtZ7ryIHY4zK9F4+O6kGUAbIzAoMAn7ZbfehB1MfdZx0etnTAAAAAElFTkSuQmCC"}},587:(e,n,i)=>{"use strict";i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var t=i(4848),o=i(8453);const a={sidebar_position:3,displayed_sidebar:"configurationSidebar",title:"LoRaWAN Downlink Config"},s="LoRaWAN Downlink Config",r={id:"configuration/lorawan-downlink-config",title:"LoRaWAN Downlink Config",description:"This article describes the technical details how to remotely configure Lobaro devices that are using LoRaWAN as",source:"@site/docs/configuration/lorawan-downlink-config.md",sourceDirName:"configuration",slug:"/configuration/lorawan-downlink-config",permalink:"/iot/configuration/lorawan-downlink-config",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/lorawan-downlink-config.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,displayed_sidebar:"configurationSidebar",title:"LoRaWAN Downlink Config"},sidebar:"configurationSidebar",previous:{title:"MBUS Reception Filtering",permalink:"/iot/configuration/meter-reception-filter-config"},next:{title:"CRON Configuration",permalink:"/iot/configuration/cron-configuration"}},d={},l=[{value:"Protocol Description",id:"protocol-description",level:2},{value:"Downlink Commands (Port 128)",id:"downlink-commands-port-128",level:3},{value:"?",id:"",level:4},{value:"g<name>",id:"gname",level:4},{value:"r<name> / r*",id:"rname--r",level:4},{value:"s<name>=<value>",id:"snamevalue",level:4},{value:"a<name>=<value>",id:"anamevalue",level:4},{value:"b",id:"b",level:4},{value:"w or wFORCE",id:"w-or-wforce",level:4},{value:"Examples",id:"examples",level:2},{value:"Changing device configuration",id:"changing-device-configuration",level:3},{value:"Downlink on TTN",id:"downlink-on-ttn",level:4},{value:"Getting the firmware version",id:"getting-the-firmware-version",level:3},{value:"Downlink on TTN",id:"downlink-on-ttn-1",level:4},{value:"Uplink on TTN",id:"uplink-on-ttn",level:4},{value:"Configure a device via script",id:"configure-a-device-via-script",level:3},{value:"Example configuration command to be send",id:"example-configuration-command-to-be-send",level:4},{value:"Curl Script for TTN",id:"curl-script-for-ttn",level:4},{value:"Chirpstack V3",id:"chirpstack-v3",level:4},{value:"Chirpstack V4",id:"chirpstack-v4",level:4}];function c(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components},{Image:a}=n;return a||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"lorawan-downlink-config",children:"LoRaWAN Downlink Config"}),"\n",(0,t.jsxs)(n.p,{children:["This article describes the technical details how to remotely configure Lobaro devices that are using ",(0,t.jsx)(n.strong,{children:"LoRaWAN"})," as\nupload technology."]}),"\n",(0,t.jsx)(n.p,{children:"IoT devices are often installed at places that are difficult to reach. If you need to change the settings of such a\ndevice it is often not easily possible to get physical access to attach a config adapter."}),"\n",(0,t.jsx)(n.p,{children:"Many of our devices support LoRaWAN remote configuration that allows you to change the configuration of the device by\nsending downlink messages."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"If you are using cellular IoT (NB-IoT, LTE-M) as communication technology any configuration updates are done in a\ndifferent way."})}),"\n",(0,t.jsx)(n.h2,{id:"protocol-description",children:"Protocol Description"}),"\n",(0,t.jsxs)(n.p,{children:["Lobaro LoRaWAN devices receive remote configuration commands as Downlinks on port 128. Responses to those commands will\nbe sent as Uplinks on ",(0,t.jsx)(n.code,{children:"Port 128"})," (and 129-131 for long responses). ",(0,t.jsx)(n.strong,{children:"The remote commands and their responses are all\nencoded in ASCII"}),", to make it easier for humans to use them. The ASCII string must be converted to hex or Base64\npayload bytes, depending on the used LoRaWAN network server."]}),"\n",(0,t.jsxs)(n.p,{children:["The first byte of a Downlink message on ",(0,t.jsx)(n.code,{children:"Port 128"})," contains a single character that identifies the command you want to\nsend. Some commands take a parameter following the command char."]}),"\n",(0,t.jsx)(n.p,{children:"The responses to a command start with the same character as the command followed by an optional parameter. If a command\nis unknown, or it fails for some reason, an error response is sent via Uplink that contains with a ! followed by a\nreadable error message."}),"\n",(0,t.jsx)(n.p,{children:"Changing configuration does nothing until you save the changes and reboot the device. The device has a safety feature\nthat prevents configurations that make the device unusable. A new configuration is tested in the first run after\nrebooting. Only after the device reaches a stable state will the configuration be adopted and used permanently. If a\nproblem occurs the device will restore its last stable connection and reboot. If the device uses OTAA (which we\nrecommend) the device will only adopt the new configuration only after a join request is accepted, to make sure the\nLoRaWAN parameters are correct. After a few failed attempts it will restore the previous configuration. This can take up\nto about 10 minutes."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Downlinks should only be used to a limited extent depending on the infrastructure. In the free version of TTN, the Fair\nuse policy says, that no more than 10 downlinks should be made. You also have to observe the regulations within the\nLimit of the duty cycle limitation. That is why downlinks are only to be carried out with caution and when absolutely\nnecessary. The number of possible characters that can be sent is limited by the respective spreading factor (With a SF\nof 12 only 51 characters)."})}),"\n",(0,t.jsx)(n.h3,{id:"downlink-commands-port-128",children:"Downlink Commands (Port 128)"}),"\n",(0,t.jsxs)(n.p,{children:["Configurations are normally communicated as downlinks and uplinks (responses) on ",(0,t.jsx)(n.code,{children:"Port 128"}),". For longer responses, that\ndon't can be send as single uplink on ",(0,t.jsx)(n.code,{children:"Port 128"}),", the ",(0,t.jsx)(n.code,{children:"Ports 129-131"})," are used. The first response part is sent\non ",(0,t.jsx)(n.code,{children:"Port 129"}),", the middle parts (if exist) on ",(0,t.jsx)(n.code,{children:"Port 130"})," and the last part on ",(0,t.jsx)(n.code,{children:"Port 131"}),". A stateful parser can\nconcatenate long responses based on Port and FCnt."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Char"}),(0,t.jsx)(n.th,{children:"Command"}),(0,t.jsx)(n.th,{children:"Parameter"}),(0,t.jsx)(n.th,{children:"HEX"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"?"}),(0,t.jsx)(n.td,{children:"Request firmware and version"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"None "})}),(0,t.jsx)(n.td,{children:"3F"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"a"}),(0,t.jsx)(n.td,{children:"Append to config parameter val"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"= "})}),(0,t.jsx)(n.td,{children:"61"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"b"}),(0,t.jsx)(n.td,{children:"Reboot device without saving"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"None "})}),(0,t.jsx)(n.td,{children:"62"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"g"}),(0,t.jsx)(n.td,{children:"Get config parameter value"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Name of parameter"})}),(0,t.jsx)(n.td,{children:"67"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"r"}),(0,t.jsx)(n.td,{children:"Reset config parameter value"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Name of parameter"})}),(0,t.jsx)(n.td,{children:"72"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"s"}),(0,t.jsx)(n.td,{children:"Set config parameter value"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"= "})}),(0,t.jsx)(n.td,{children:"73"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"S"}),(0,t.jsx)(n.td,{children:"Set config parameter value & Save and reboot"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"= "})}),(0,t.jsx)(n.td,{children:"53"}),(0,t.jsx)(n.td,{children:"Not supported on all devices"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"w"}),(0,t.jsx)(n.td,{children:"Save config and reboot device"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"None "})}),(0,t.jsx)(n.td,{children:"77"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"Depending on the firmware version not all commands might be supported on all devices.\nPlease refer to the manual of your product for more details."})}),"\n",(0,t.jsx)(n.h4,{id:"",children:(0,t.jsx)(n.code,{children:"?"})}),"\n",(0,t.jsx)(n.p,{children:"Request firmware and version. This command triggers the device to send what firmware it is running and in which version.\nThis can be used to test if the remote configuration is working."}),"\n",(0,t.jsx)(n.h4,{id:"gname",children:(0,t.jsx)(n.code,{children:"g"})}),"\n",(0,t.jsxs)(n.p,{children:["Get the value of the config parameter ",(0,t.jsx)(n.code,{children:""}),". This command makes the device sent a response\ncontaining ",(0,t.jsx)(n.code,{children:"="})," as\nparameter giving you the current value of a configuration parameter."]}),"\n",(0,t.jsx)(n.h4,{id:"rname--r",children:(0,t.jsx)(n.code,{children:"r / r*"})}),"\n",(0,t.jsxs)(n.p,{children:["Reset config parameter ",(0,t.jsx)(n.code,{children:""})," to its default value. As a confirmation the device sends a response\ncontaining ",(0,t.jsx)(n.code,{children:"="}),", reporting the new value of the parameter.Sending the special value * will reset all config\nparameters."]}),"\n",(0,t.jsx)(n.h4,{id:"snamevalue",children:(0,t.jsx)(n.code,{children:"s="})}),"\n",(0,t.jsxs)(n.p,{children:["Set config parameter ",(0,t.jsx)(n.code,{children:""})," to ",(0,t.jsx)(n.code,{children:""}),". Sets the parameter to the value given in the parameter. As a confirmation it\nsends a response containing ",(0,t.jsx)(n.code,{children:"="}),", reporting the new value of the parameter."]}),"\n",(0,t.jsx)(n.h4,{id:"anamevalue",children:(0,t.jsx)(n.code,{children:"a="})}),"\n",(0,t.jsxs)(n.p,{children:["Append ",(0,t.jsx)(n.code,{children:""})," to the config parameter ",(0,t.jsx)(n.code,{children:""}),". This command appends the value given to the current value of the\nparameter. This is intended to allow setting values that are too long for a single Downlink message. As a confirmation\nit sends the length of the config parameter's value after the appending. Append works for config parameters of type\nstring."]}),"\n",(0,t.jsx)(n.h4,{id:"b",children:(0,t.jsx)(n.code,{children:"b"})}),"\n",(0,t.jsx)(n.p,{children:"Reboot device without saving. This command restarts the device. Any changes too the config that have been committed\nbefore will be lost! This command does not send a Response."}),"\n",(0,t.jsx)(n.h4,{id:"w-or-wforce",children:(0,t.jsx)(n.code,{children:"w or wFORCE"})}),"\n",(0,t.jsx)(n.p,{children:"Save config and reboot device. This command saves all configuration changes to a temporarily configuration and restarts\nthe device. Only if the device boots successfully and reaches normal operation mode is the new configuration made\npermanent. If any fatal configuration error occurs or if the LoRaWAN OTAA Join does not succeed, the previous\nconfiguration will be restored and the device restarted again. This command does not send a Response.If you add the\nspecial argument FORCE to the command, the configuration will be made permanent without testing the configuration."}),"\n",(0,t.jsxs)(n.admonition,{type:"danger",children:[(0,t.jsxs)(n.p,{children:["Using ",(0,t.jsx)(n.strong,{children:"wFORCE"})," can leave your device useless and unreachable!"]}),(0,t.jsxs)(n.p,{children:["Do not use ",(0,t.jsx)(n.strong,{children:"wFORCE"})," unless you have a very good reason. If the device is set to an invalid configuration it will no\nlonger\nbe reachable by the Network Server. From such a state it can only be recovered with physical access and a config\nadapter. It will also most likely drain the battery quickly."]})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["For commands ",(0,t.jsx)(n.code,{children:"s"}),", ",(0,t.jsx)(n.code,{children:"S"})," and ",(0,t.jsx)(n.code,{children:"a"})," make sure the number of characters to send matches with the possibilities your devices\nspreading factor:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"SF 7 = 242 bytes max. LoRaWAN downlink payload"}),"\n",(0,t.jsx)(n.li,{children:"SF 12 = 51 bytes max. LoRaWAN downlink payload"}),"\n"]}),(0,t.jsx)(n.p,{children:"Consider splitting bigger configuration changed in multiple smaller downlinks."})]}),"\n",(0,t.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,t.jsx)(n.h3,{id:"changing-device-configuration",children:"Changing device configuration"}),"\n",(0,t.jsx)(n.p,{children:"The following is a short example of how you can update two configuration values remotely (that includes rebooting the\ndevice)."}),"\n",(0,t.jsx)(n.p,{children:"Most LoRaWAN devices (all that are running in Class A, which are by fast the most) can only be reached when they contact\nthe network. Network Servers (like The Things Network) provide a mechanism to enqueue messages for a specific device.\nThe messages will be sent as downlink the next time that device contacts the network. Normally, multiple messages can be\nenqueued and will all be transmitted as soon as possible. Please be advised that the gateways communicating with your\ndevice must respect their duty cycle, so there is a very limited amount of downlinks that can be sent for a given time (\ndownlinks are expensive)."}),"\n",(0,t.jsx)(n.p,{children:"For this example we want to set Time Synchronization to sync the internal clock every 10 days, and we want to deactivate\nAdaptive Date Rate (ADR). These are both LoRaWAN configuration parameters that are present on most devices (find details\nunder LoRaWAN Configuration), but you can of course also change parameters specific to your device, e.g. Modbus\nconfiguration or wMBus configuration, with this feature."}),"\n",(0,t.jsx)(n.p,{children:"We will need to send three commands:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"s"}),"TimeSync=10","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"set time synchronization to 10 day interval"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"s"}),"ADR=false","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"disable adaptive data rate"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"w"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"write changes to device configuration and reboot"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The actual s-commands will of course differ for your case, but the w command at the end ",(0,t.jsx)(n.strong,{children:"must"})," always be the same."]}),"\n",(0,t.jsx)(n.p,{children:"After sending the final command, the device will reboot and try the new configuration. If the boot process and the\nconnection to the network are successful, the device will make the changes permanent. If there is a problem (if you\naccidentally set an invalid value, e.g. sADR=flase or if you changed your AppKey to wrong value and your OTAA fails),\nthe device will revert to the previous configuration."}),"\n",(0,t.jsx)(n.h4,{id:"downlink-on-ttn",children:"Downlink on TTN"}),"\n",(0,t.jsx)(n.p,{children:"How you sent your downlinks depends on the LoRaWAN Network Server you use to connect your devices. You will most likely\nneed to convert the commands (that are all ASCII) to some different representation, e.g. Hex or Base64."}),"\n",(0,t.jsx)(n.p,{children:'In The Things Network you find the downlink panel on the "Device Overview" page for each device, directly below the\npanel that shows you OTAA/ABP information (DevEUI, AppKey, ...). It is shown in the following screenshot.'}),"\n",(0,t.jsx)(a,{alt:"TTN LoRaWAN downlink configuration",img:i(9834),style:{width:"60%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsxs)(n.p,{children:["You will have to encode the commands in hex. In the screenshot you see ",(0,t.jsx)(n.code,{children:"73 54 69 6d 65 53 79 6e 63 3d 31 30"})," as the\nmessage to send; that is the hex representation of ",(0,t.jsx)(n.code,{children:"sTimeSync=10"}),". The Port used for remote configuration for our\ndevices\nis 128. When you enter multiple messages to send, be sure to set the correct scheduling (last). The preselected replace\nwill overwrite your previously enqueued messages."]}),"\n",(0,t.jsx)(n.h3,{id:"getting-the-firmware-version",children:"Getting the firmware version"}),"\n",(0,t.jsxs)(n.p,{children:['For this example the "Request firmware and version" ',(0,t.jsx)(n.code,{children:"?"})," (0x3F) command has to used. We use TTN as network server."]}),"\n",(0,t.jsx)(n.h4,{id:"downlink-on-ttn-1",children:"Downlink on TTN"}),"\n",(0,t.jsx)(a,{alt:"TTN LoRaWAN downlink get firmware version",img:i(8207),style:{width:"50%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsx)(n.p,{children:"Will result in:"}),"\n",(0,t.jsx)(a,{alt:"TTN LoRaWAN downlink get firmware version",img:i(4513),style:{width:"50%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsx)(n.h4,{id:"uplink-on-ttn",children:"Uplink on TTN"}),"\n",(0,t.jsx)(n.p,{children:"The device answers with this uplink:"}),"\n",(0,t.jsx)(a,{alt:"TTN LoRaWAN uplink get firmware version",img:i(2571),style:{width:"95%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsxs)(n.p,{children:["This response can be converted to ASCII again, e.g. using\nany ",(0,t.jsx)(n.a,{href:"https://www.rapidtables.com/convert/number/hex-to-ascii.html",children:"online converter"}),":"]}),"\n",(0,t.jsx)(a,{alt:"TTN LoRaWAN uplink to ascii conversion get firmware version",img:i(7366),style:{width:"30%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsxs)(n.p,{children:["The result is: ",(0,t.jsx)(n.code,{children:"?app-hybrid-modbus v0.4.0+battery"})]}),"\n",(0,t.jsx)(n.h3,{id:"configure-a-device-via-script",children:"Configure a device via script"}),"\n",(0,t.jsx)(n.h4,{id:"example-configuration-command-to-be-send",children:"Example configuration command to be send"}),"\n",(0,t.jsxs)(n.p,{children:["Example command (ASCII encoding):",(0,t.jsx)(n.br,{}),"\n",(0,t.jsx)(n.code,{children:"SMbCmd=0 0/10 * * * *:R,9600,8N1:010300160002,010300260002,fa0400050001"})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["For commands ",(0,t.jsx)(n.code,{children:"s"}),", ",(0,t.jsx)(n.code,{children:"S"})," and ",(0,t.jsx)(n.code,{children:"a"})," make sure the number of characters to send matches with the possibilities your devices\nspreading factor:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"SF 7 = 242 bytes max. LoRaWAN downlink payload"}),"\n",(0,t.jsx)(n.li,{children:"SF 12 = 51 bytes max. LoRaWAN downlink payload"}),"\n"]}),(0,t.jsx)(n.p,{children:"Consider splitting bigger configuration changed in multiple smaller downlinks."})]}),"\n",(0,t.jsxs)(n.p,{children:["Example command (Base64 encoding):",(0,t.jsx)(n.br,{}),"\n",(0,t.jsx)(n.code,{children:"U01iQ21kPTAgMC8xMCAqICogKiAqOlIsOTYwMCw4TjE6MDEwMzAwMTYwMDAyLDAxMDMwMDI2MDAwMixmYTA0MDAwNTAwMDE="})]}),"\n",(0,t.jsx)(n.h4,{id:"curl-script-for-ttn",children:"Curl Script for TTN"}),"\n",(0,t.jsx)(n.p,{children:"Curl script to be used with TTN:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"curl --location \\ --header 'Authorization: Bearer NNSXS.XJAZK3VF3YBMXX_API_KEY_KR2HFG6ABXXXXXX.CP4WZUOXXXXXXXB5WW4UUSMNXRLUJ7LVO2U' \\\n--header 'Content-Type: application/json' \\\n--header 'User-Agent: my-integration/my-integration-version' \\\n--request POST \\ --data '{\"downlinks\":[{ \"frm_payload\":\n\"U01iQ21kPTAgMC8xMCAqICogKiAqOlIsOTYwMCw4TjE6MDEwMzAwMTYwMDAyLDAxMDMwMDI2MDAwMixmYTA0MDAwNTAwMDE=\",\n\"f_port\":128 }] }' \\\n'https://eu1.cloud.thethings.network/api/v3/as/applications/your-ttn-applicationID/devices/eui-your_TTN_end_deviceID/down/push'\n"})}),"\n",(0,t.jsxs)(n.p,{children:["See also: ",(0,t.jsx)(n.a,{href:"https://www.thethingsindustries.com/docs/integrations/webhooks/scheduling-downlinks/",children:"https://www.thethingsindustries.com/docs/integrations/webhooks/scheduling-downlinks/"})]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"You should use your own data for the API KEY, your-ttn-applicationID and your your_TTN_end_deviceID"})}),"\n",(0,t.jsx)(n.h4,{id:"chirpstack-v3",children:"Chirpstack V3"}),"\n",(0,t.jsx)(n.p,{children:"Curl script to be used with Chirpstack V3:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"curl -X POST --header 'Content-Type: application/json'\n--header 'Accept: application/json'\n--header 'Grpc-Metadata-Authorization:\nBearer xxxxxxxxx_API_KEY_xxxxxxx' -d\n'{ \"deviceQueueItem\": { \"confirmed\": false, \"data\":\n\"U01iQ21kPTAgMC8xMCAqICogKiAqOlIsOTYwMCw4TjE6MDEwMzAwMTYwMDAyLDAxMDMwMDI2MDAwMixmYTA0MDAwNTAwMDE=\",\n\"fPort\": 128\n } }'\n'http://192.198.0.101:8080/api/devices/ChirpStack_DevEUI/queue'\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"You should use your own data for the API KEY, your Chirpstack_IP_Adress and your your_ChirpStack_DevEUI"})}),"\n",(0,t.jsx)(n.h4,{id:"chirpstack-v4",children:"Chirpstack V4"}),"\n",(0,t.jsx)(n.p,{children:'The actual API has now switched from the Swagger API with UI to gRPC integration, but for compatibility and transition\nreasons the chirpstack-rest-api can be installed as an additional component. However, experience has shown that there\nare changes that need to be considered. "deviceQueueItem" became ""queueItem" and by default the API can now be reached\non port 8090 and no longer 8080.'}),"\n",(0,t.jsx)(n.p,{children:"Curl script to be used with Chirpstack V4:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"curl -X POST --header 'Content-Type: application/json'\n--header 'Accept: application/json'\n--header 'Grpc-Metadata-Authorization:\nBearer xxxxxxxxx_API_KEY_xxxxxxx' -d\n'{ \"queueItem\": { \"confirmed\": false, \"data\":\n\"U01iQ21kPTAgMC8xMCAqICogKiAqOlIsOTYwMCw4TjE6MDEwMzAwMTYwMDAyLDAxMDMwMDI2MDAwMixmYTA0MDAwNTAwMDE=\",\n\"fPort\": 128\n } }'\n'http://192.198.0.101:8090/api/devices/ChirpStack_DevEUI/queue'\n"})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{"use strict";i.d(n,{R:()=>s,x:()=>r});var t=i(6540);const o={},a=t.createContext(o);function s(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4ddd2498.7a8568ac.js b/assets/js/4ddd2498.7a8568ac.js new file mode 100644 index 00000000..5405218a --- /dev/null +++ b/assets/js/4ddd2498.7a8568ac.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1110],{7366:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/3F-result-in-ascii.c89288d.619.png 619w",images:[{path:i.p+"assets/images/ideal-img/3F-result-in-ascii.c89288d.619.png",width:619,height:648}],src:i.p+"assets/images/ideal-img/3F-result-in-ascii.c89288d.619.png",toString:function(){return i.p+"assets/images/ideal-img/3F-result-in-ascii.c89288d.619.png"},placeholder:void 0,width:619,height:648},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABDUlEQVR4nCXOzU/CMBiA8f7/B4/eTSQSNHLQSDwoJhrR3fTAh4DuA9aObv0eHeu71qDJL8/5QUIqIRQXSiptdK20aZqDc9C2znuPKEkYzRhNJcNaEC2I4ljyXHJca4rI9qvAsWS5NdRILKrUGmrNztalYgkaj0fnF73BVX81j1S5YGTKixkvjmXFFJHtIksWaTwn2zUv04omvMok24gqE+UPsjUH8G3rjjsOALoQQvA+hNBYgWpTAjhwhw7aDlzX/Wu972zNkKHJge+sxtBQsHSvsJH5HyyrGN1/3vSi3kv0FL29TibPRb7cq43miRGZLNfo9vHsdHhyN+w/DK9Hl4PVx3tF4wKvd+SbkuUv4kcPHFiK110AAAAASUVORK5CYII="}},8207:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/Downlink-TTN-get-fw.b7f06e1.882.png 882w",images:[{path:i.p+"assets/images/ideal-img/Downlink-TTN-get-fw.b7f06e1.882.png",width:882,height:660}],src:i.p+"assets/images/ideal-img/Downlink-TTN-get-fw.b7f06e1.882.png",toString:function(){return i.p+"assets/images/ideal-img/Downlink-TTN-get-fw.b7f06e1.882.png"},placeholder:void 0,width:882,height:660},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAIAAAC+zks0AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAcUlEQVR4nG2MMQ7CMBAE/f9v0fAMilAgpAT7Ysu+27tFcYEAZTTdSJNIam35du8vcQYAdwcQESSTmW7PteXKM5KaSd1V1d1P8iili9h8xuQnN9nrfpwj/p3znEcTNfQBA789ctna9bI8ljUCZgrYR5JvSz7Nn8r84TIAAAAASUVORK5CYII="}},2571:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/lorawan-downlink-3F-answer.4bc9c29.1378.png 1378w",images:[{path:i.p+"assets/images/ideal-img/lorawan-downlink-3F-answer.4bc9c29.1378.png",width:1378,height:31}],src:i.p+"assets/images/ideal-img/lorawan-downlink-3F-answer.4bc9c29.1378.png",toString:function(){return i.p+"assets/images/ideal-img/lorawan-downlink-3F-answer.4bc9c29.1378.png"},placeholder:void 0,width:1378,height:31},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAABCAIAAABol6gpAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAKklEQVR4nAEfAOD/APLy8vDw8Pb29vLx8fH09O3Z2ea3t/Du7vHy8vPz86+eG6M4AoFrAAAAAElFTkSuQmCC"}},4513:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/lorawan-downlink-3F-downlink.80f3eb1.634.png 634w",images:[{path:i.p+"assets/images/ideal-img/lorawan-downlink-3F-downlink.80f3eb1.634.png",width:634,height:45}],src:i.p+"assets/images/ideal-img/lorawan-downlink-3F-downlink.80f3eb1.634.png",toString:function(){return i.p+"assets/images/ideal-img/lorawan-downlink-3F-downlink.80f3eb1.634.png"},placeholder:void 0,width:634,height:45},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAABCAIAAABol6gpAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAHklEQVR4nGP4+vXrly9fPsPAz58/ISLfvn379OkTALwKHKViCz9TAAAAAElFTkSuQmCC"}},9834:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/ttn-downlink.307b73d.1081.png 1081w",images:[{path:i.p+"assets/images/ideal-img/ttn-downlink.307b73d.1081.png",width:1081,height:370}],src:i.p+"assets/images/ideal-img/ttn-downlink.307b73d.1081.png",toString:function(){return i.p+"assets/images/ideal-img/ttn-downlink.307b73d.1081.png"},placeholder:void 0,width:1081,height:370},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAS0lEQVR4nEXLUQqAMAwD0N3/lB5AUBHWpNsaaUEtPPKRtO3nJZCKiDLnFEmttT7urtZ7ryIHY4zK9F4+O6kGUAbIzAoMAn7ZbfehB1MfdZx0etnTAAAAAElFTkSuQmCC"}},587:(e,n,i)=>{"use strict";i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var t=i(4848),o=i(8453);const a={sidebar_position:3,title:"LoRaWAN Downlink Config"},s="LoRaWAN Downlink Config",r={id:"configuration/lorawan-downlink-config",title:"LoRaWAN Downlink Config",description:"This article describes the technical details how to remotely configure Lobaro devices that are using LoRaWAN as",source:"@site/docs/configuration/lorawan-downlink-config.md",sourceDirName:"configuration",slug:"/configuration/lorawan-downlink-config",permalink:"/iot/configuration/lorawan-downlink-config",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/lorawan-downlink-config.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,title:"LoRaWAN Downlink Config"},sidebar:"allDocSidebar",previous:{title:"MBUS Reception Filtering",permalink:"/iot/configuration/meter-reception-filter-config"},next:{title:"CRON Configuration",permalink:"/iot/configuration/cron-configuration"}},d={},l=[{value:"Protocol Description",id:"protocol-description",level:2},{value:"Downlink Commands (Port 128)",id:"downlink-commands-port-128",level:3},{value:"?",id:"",level:4},{value:"g<name>",id:"gname",level:4},{value:"r<name> / r*",id:"rname--r",level:4},{value:"s<name>=<value>",id:"snamevalue",level:4},{value:"a<name>=<value>",id:"anamevalue",level:4},{value:"b",id:"b",level:4},{value:"w or wFORCE",id:"w-or-wforce",level:4},{value:"Examples",id:"examples",level:2},{value:"Changing device configuration",id:"changing-device-configuration",level:3},{value:"Downlink on TTN",id:"downlink-on-ttn",level:4},{value:"Getting the firmware version",id:"getting-the-firmware-version",level:3},{value:"Downlink on TTN",id:"downlink-on-ttn-1",level:4},{value:"Uplink on TTN",id:"uplink-on-ttn",level:4},{value:"Configure a device via script",id:"configure-a-device-via-script",level:3},{value:"Example configuration command to be send",id:"example-configuration-command-to-be-send",level:4},{value:"Curl Script for TTN",id:"curl-script-for-ttn",level:4},{value:"Chirpstack V3",id:"chirpstack-v3",level:4},{value:"Chirpstack V4",id:"chirpstack-v4",level:4}];function c(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components},{Image:a}=n;return a||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"lorawan-downlink-config",children:"LoRaWAN Downlink Config"}),"\n",(0,t.jsxs)(n.p,{children:["This article describes the technical details how to remotely configure Lobaro devices that are using ",(0,t.jsx)(n.strong,{children:"LoRaWAN"})," as\nupload technology."]}),"\n",(0,t.jsx)(n.p,{children:"IoT devices are often installed at places that are difficult to reach. If you need to change the settings of such a\ndevice it is often not easily possible to get physical access to attach a config adapter."}),"\n",(0,t.jsx)(n.p,{children:"Many of our devices support LoRaWAN remote configuration that allows you to change the configuration of the device by\nsending downlink messages."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"If you are using cellular IoT (NB-IoT, LTE-M) as communication technology any configuration updates are done in a\ndifferent way."})}),"\n",(0,t.jsx)(n.h2,{id:"protocol-description",children:"Protocol Description"}),"\n",(0,t.jsxs)(n.p,{children:["Lobaro LoRaWAN devices receive remote configuration commands as Downlinks on port 128. Responses to those commands will\nbe sent as Uplinks on ",(0,t.jsx)(n.code,{children:"Port 128"})," (and 129-131 for long responses). ",(0,t.jsx)(n.strong,{children:"The remote commands and their responses are all\nencoded in ASCII"}),", to make it easier for humans to use them. The ASCII string must be converted to hex or Base64\npayload bytes, depending on the used LoRaWAN network server."]}),"\n",(0,t.jsxs)(n.p,{children:["The first byte of a Downlink message on ",(0,t.jsx)(n.code,{children:"Port 128"})," contains a single character that identifies the command you want to\nsend. Some commands take a parameter following the command char."]}),"\n",(0,t.jsx)(n.p,{children:"The responses to a command start with the same character as the command followed by an optional parameter. If a command\nis unknown, or it fails for some reason, an error response is sent via Uplink that contains with a ! followed by a\nreadable error message."}),"\n",(0,t.jsx)(n.p,{children:"Changing configuration does nothing until you save the changes and reboot the device. The device has a safety feature\nthat prevents configurations that make the device unusable. A new configuration is tested in the first run after\nrebooting. Only after the device reaches a stable state will the configuration be adopted and used permanently. If a\nproblem occurs the device will restore its last stable connection and reboot. If the device uses OTAA (which we\nrecommend) the device will only adopt the new configuration only after a join request is accepted, to make sure the\nLoRaWAN parameters are correct. After a few failed attempts it will restore the previous configuration. This can take up\nto about 10 minutes."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Downlinks should only be used to a limited extent depending on the infrastructure. In the free version of TTN, the Fair\nuse policy says, that no more than 10 downlinks should be made. You also have to observe the regulations within the\nLimit of the duty cycle limitation. That is why downlinks are only to be carried out with caution and when absolutely\nnecessary. The number of possible characters that can be sent is limited by the respective spreading factor (With a SF\nof 12 only 51 characters)."})}),"\n",(0,t.jsx)(n.h3,{id:"downlink-commands-port-128",children:"Downlink Commands (Port 128)"}),"\n",(0,t.jsxs)(n.p,{children:["Configurations are normally communicated as downlinks and uplinks (responses) on ",(0,t.jsx)(n.code,{children:"Port 128"}),". For longer responses, that\ndon't can be send as single uplink on ",(0,t.jsx)(n.code,{children:"Port 128"}),", the ",(0,t.jsx)(n.code,{children:"Ports 129-131"})," are used. The first response part is sent\non ",(0,t.jsx)(n.code,{children:"Port 129"}),", the middle parts (if exist) on ",(0,t.jsx)(n.code,{children:"Port 130"})," and the last part on ",(0,t.jsx)(n.code,{children:"Port 131"}),". A stateful parser can\nconcatenate long responses based on Port and FCnt."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Char"}),(0,t.jsx)(n.th,{children:"Command"}),(0,t.jsx)(n.th,{children:"Parameter"}),(0,t.jsx)(n.th,{children:"HEX"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"?"}),(0,t.jsx)(n.td,{children:"Request firmware and version"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"None "})}),(0,t.jsx)(n.td,{children:"3F"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"a"}),(0,t.jsx)(n.td,{children:"Append to config parameter val"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"= "})}),(0,t.jsx)(n.td,{children:"61"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"b"}),(0,t.jsx)(n.td,{children:"Reboot device without saving"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"None "})}),(0,t.jsx)(n.td,{children:"62"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"g"}),(0,t.jsx)(n.td,{children:"Get config parameter value"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Name of parameter"})}),(0,t.jsx)(n.td,{children:"67"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"r"}),(0,t.jsx)(n.td,{children:"Reset config parameter value"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Name of parameter"})}),(0,t.jsx)(n.td,{children:"72"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"s"}),(0,t.jsx)(n.td,{children:"Set config parameter value"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"= "})}),(0,t.jsx)(n.td,{children:"73"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"S"}),(0,t.jsx)(n.td,{children:"Set config parameter value & Save and reboot"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"= "})}),(0,t.jsx)(n.td,{children:"53"}),(0,t.jsx)(n.td,{children:"Not supported on all devices"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"w"}),(0,t.jsx)(n.td,{children:"Save config and reboot device"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"None "})}),(0,t.jsx)(n.td,{children:"77"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"Depending on the firmware version not all commands might be supported on all devices.\nPlease refer to the manual of your product for more details."})}),"\n",(0,t.jsx)(n.h4,{id:"",children:(0,t.jsx)(n.code,{children:"?"})}),"\n",(0,t.jsx)(n.p,{children:"Request firmware and version. This command triggers the device to send what firmware it is running and in which version.\nThis can be used to test if the remote configuration is working."}),"\n",(0,t.jsx)(n.h4,{id:"gname",children:(0,t.jsx)(n.code,{children:"g"})}),"\n",(0,t.jsxs)(n.p,{children:["Get the value of the config parameter ",(0,t.jsx)(n.code,{children:""}),". This command makes the device sent a response\ncontaining ",(0,t.jsx)(n.code,{children:"="})," as\nparameter giving you the current value of a configuration parameter."]}),"\n",(0,t.jsx)(n.h4,{id:"rname--r",children:(0,t.jsx)(n.code,{children:"r / r*"})}),"\n",(0,t.jsxs)(n.p,{children:["Reset config parameter ",(0,t.jsx)(n.code,{children:""})," to its default value. As a confirmation the device sends a response\ncontaining ",(0,t.jsx)(n.code,{children:"="}),", reporting the new value of the parameter.Sending the special value * will reset all config\nparameters."]}),"\n",(0,t.jsx)(n.h4,{id:"snamevalue",children:(0,t.jsx)(n.code,{children:"s="})}),"\n",(0,t.jsxs)(n.p,{children:["Set config parameter ",(0,t.jsx)(n.code,{children:""})," to ",(0,t.jsx)(n.code,{children:""}),". Sets the parameter to the value given in the parameter. As a confirmation it\nsends a response containing ",(0,t.jsx)(n.code,{children:"="}),", reporting the new value of the parameter."]}),"\n",(0,t.jsx)(n.h4,{id:"anamevalue",children:(0,t.jsx)(n.code,{children:"a="})}),"\n",(0,t.jsxs)(n.p,{children:["Append ",(0,t.jsx)(n.code,{children:""})," to the config parameter ",(0,t.jsx)(n.code,{children:""}),". This command appends the value given to the current value of the\nparameter. This is intended to allow setting values that are too long for a single Downlink message. As a confirmation\nit sends the length of the config parameter's value after the appending. Append works for config parameters of type\nstring."]}),"\n",(0,t.jsx)(n.h4,{id:"b",children:(0,t.jsx)(n.code,{children:"b"})}),"\n",(0,t.jsx)(n.p,{children:"Reboot device without saving. This command restarts the device. Any changes too the config that have been committed\nbefore will be lost! This command does not send a Response."}),"\n",(0,t.jsx)(n.h4,{id:"w-or-wforce",children:(0,t.jsx)(n.code,{children:"w or wFORCE"})}),"\n",(0,t.jsx)(n.p,{children:"Save config and reboot device. This command saves all configuration changes to a temporarily configuration and restarts\nthe device. Only if the device boots successfully and reaches normal operation mode is the new configuration made\npermanent. If any fatal configuration error occurs or if the LoRaWAN OTAA Join does not succeed, the previous\nconfiguration will be restored and the device restarted again. This command does not send a Response.If you add the\nspecial argument FORCE to the command, the configuration will be made permanent without testing the configuration."}),"\n",(0,t.jsxs)(n.admonition,{type:"danger",children:[(0,t.jsxs)(n.p,{children:["Using ",(0,t.jsx)(n.strong,{children:"wFORCE"})," can leave your device useless and unreachable!"]}),(0,t.jsxs)(n.p,{children:["Do not use ",(0,t.jsx)(n.strong,{children:"wFORCE"})," unless you have a very good reason. If the device is set to an invalid configuration it will no\nlonger\nbe reachable by the Network Server. From such a state it can only be recovered with physical access and a config\nadapter. It will also most likely drain the battery quickly."]})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["For commands ",(0,t.jsx)(n.code,{children:"s"}),", ",(0,t.jsx)(n.code,{children:"S"})," and ",(0,t.jsx)(n.code,{children:"a"})," make sure the number of characters to send matches with the possibilities your devices\nspreading factor:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"SF 7 = 242 bytes max. LoRaWAN downlink payload"}),"\n",(0,t.jsx)(n.li,{children:"SF 12 = 51 bytes max. LoRaWAN downlink payload"}),"\n"]}),(0,t.jsx)(n.p,{children:"Consider splitting bigger configuration changed in multiple smaller downlinks."})]}),"\n",(0,t.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,t.jsx)(n.h3,{id:"changing-device-configuration",children:"Changing device configuration"}),"\n",(0,t.jsx)(n.p,{children:"The following is a short example of how you can update two configuration values remotely (that includes rebooting the\ndevice)."}),"\n",(0,t.jsx)(n.p,{children:"Most LoRaWAN devices (all that are running in Class A, which are by fast the most) can only be reached when they contact\nthe network. Network Servers (like The Things Network) provide a mechanism to enqueue messages for a specific device.\nThe messages will be sent as downlink the next time that device contacts the network. Normally, multiple messages can be\nenqueued and will all be transmitted as soon as possible. Please be advised that the gateways communicating with your\ndevice must respect their duty cycle, so there is a very limited amount of downlinks that can be sent for a given time (\ndownlinks are expensive)."}),"\n",(0,t.jsx)(n.p,{children:"For this example we want to set Time Synchronization to sync the internal clock every 10 days, and we want to deactivate\nAdaptive Date Rate (ADR). These are both LoRaWAN configuration parameters that are present on most devices (find details\nunder LoRaWAN Configuration), but you can of course also change parameters specific to your device, e.g. Modbus\nconfiguration or wMBus configuration, with this feature."}),"\n",(0,t.jsx)(n.p,{children:"We will need to send three commands:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"s"}),"TimeSync=10","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"set time synchronization to 10 day interval"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"s"}),"ADR=false","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"disable adaptive data rate"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"w"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"write changes to device configuration and reboot"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The actual s-commands will of course differ for your case, but the w command at the end ",(0,t.jsx)(n.strong,{children:"must"})," always be the same."]}),"\n",(0,t.jsx)(n.p,{children:"After sending the final command, the device will reboot and try the new configuration. If the boot process and the\nconnection to the network are successful, the device will make the changes permanent. If there is a problem (if you\naccidentally set an invalid value, e.g. sADR=flase or if you changed your AppKey to wrong value and your OTAA fails),\nthe device will revert to the previous configuration."}),"\n",(0,t.jsx)(n.h4,{id:"downlink-on-ttn",children:"Downlink on TTN"}),"\n",(0,t.jsx)(n.p,{children:"How you sent your downlinks depends on the LoRaWAN Network Server you use to connect your devices. You will most likely\nneed to convert the commands (that are all ASCII) to some different representation, e.g. Hex or Base64."}),"\n",(0,t.jsx)(n.p,{children:'In The Things Network you find the downlink panel on the "Device Overview" page for each device, directly below the\npanel that shows you OTAA/ABP information (DevEUI, AppKey, ...). It is shown in the following screenshot.'}),"\n",(0,t.jsx)(a,{alt:"TTN LoRaWAN downlink configuration",img:i(9834),style:{width:"60%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsxs)(n.p,{children:["You will have to encode the commands in hex. In the screenshot you see ",(0,t.jsx)(n.code,{children:"73 54 69 6d 65 53 79 6e 63 3d 31 30"})," as the\nmessage to send; that is the hex representation of ",(0,t.jsx)(n.code,{children:"sTimeSync=10"}),". The Port used for remote configuration for our\ndevices\nis 128. When you enter multiple messages to send, be sure to set the correct scheduling (last). The preselected replace\nwill overwrite your previously enqueued messages."]}),"\n",(0,t.jsx)(n.h3,{id:"getting-the-firmware-version",children:"Getting the firmware version"}),"\n",(0,t.jsxs)(n.p,{children:['For this example the "Request firmware and version" ',(0,t.jsx)(n.code,{children:"?"})," (0x3F) command has to used. We use TTN as network server."]}),"\n",(0,t.jsx)(n.h4,{id:"downlink-on-ttn-1",children:"Downlink on TTN"}),"\n",(0,t.jsx)(a,{alt:"TTN LoRaWAN downlink get firmware version",img:i(8207),style:{width:"50%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsx)(n.p,{children:"Will result in:"}),"\n",(0,t.jsx)(a,{alt:"TTN LoRaWAN downlink get firmware version",img:i(4513),style:{width:"50%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsx)(n.h4,{id:"uplink-on-ttn",children:"Uplink on TTN"}),"\n",(0,t.jsx)(n.p,{children:"The device answers with this uplink:"}),"\n",(0,t.jsx)(a,{alt:"TTN LoRaWAN uplink get firmware version",img:i(2571),style:{width:"95%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsxs)(n.p,{children:["This response can be converted to ASCII again, e.g. using\nany ",(0,t.jsx)(n.a,{href:"https://www.rapidtables.com/convert/number/hex-to-ascii.html",children:"online converter"}),":"]}),"\n",(0,t.jsx)(a,{alt:"TTN LoRaWAN uplink to ascii conversion get firmware version",img:i(7366),style:{width:"30%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsxs)(n.p,{children:["The result is: ",(0,t.jsx)(n.code,{children:"?app-hybrid-modbus v0.4.0+battery"})]}),"\n",(0,t.jsx)(n.h3,{id:"configure-a-device-via-script",children:"Configure a device via script"}),"\n",(0,t.jsx)(n.h4,{id:"example-configuration-command-to-be-send",children:"Example configuration command to be send"}),"\n",(0,t.jsxs)(n.p,{children:["Example command (ASCII encoding):",(0,t.jsx)(n.br,{}),"\n",(0,t.jsx)(n.code,{children:"SMbCmd=0 0/10 * * * *:R,9600,8N1:010300160002,010300260002,fa0400050001"})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["For commands ",(0,t.jsx)(n.code,{children:"s"}),", ",(0,t.jsx)(n.code,{children:"S"})," and ",(0,t.jsx)(n.code,{children:"a"})," make sure the number of characters to send matches with the possibilities your devices\nspreading factor:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"SF 7 = 242 bytes max. LoRaWAN downlink payload"}),"\n",(0,t.jsx)(n.li,{children:"SF 12 = 51 bytes max. LoRaWAN downlink payload"}),"\n"]}),(0,t.jsx)(n.p,{children:"Consider splitting bigger configuration changed in multiple smaller downlinks."})]}),"\n",(0,t.jsxs)(n.p,{children:["Example command (Base64 encoding):",(0,t.jsx)(n.br,{}),"\n",(0,t.jsx)(n.code,{children:"U01iQ21kPTAgMC8xMCAqICogKiAqOlIsOTYwMCw4TjE6MDEwMzAwMTYwMDAyLDAxMDMwMDI2MDAwMixmYTA0MDAwNTAwMDE="})]}),"\n",(0,t.jsx)(n.h4,{id:"curl-script-for-ttn",children:"Curl Script for TTN"}),"\n",(0,t.jsx)(n.p,{children:"Curl script to be used with TTN:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"curl --location \\ --header 'Authorization: Bearer NNSXS.XJAZK3VF3YBMXX_API_KEY_KR2HFG6ABXXXXXX.CP4WZUOXXXXXXXB5WW4UUSMNXRLUJ7LVO2U' \\\n--header 'Content-Type: application/json' \\\n--header 'User-Agent: my-integration/my-integration-version' \\\n--request POST \\ --data '{\"downlinks\":[{ \"frm_payload\":\n\"U01iQ21kPTAgMC8xMCAqICogKiAqOlIsOTYwMCw4TjE6MDEwMzAwMTYwMDAyLDAxMDMwMDI2MDAwMixmYTA0MDAwNTAwMDE=\",\n\"f_port\":128 }] }' \\\n'https://eu1.cloud.thethings.network/api/v3/as/applications/your-ttn-applicationID/devices/eui-your_TTN_end_deviceID/down/push'\n"})}),"\n",(0,t.jsxs)(n.p,{children:["See also: ",(0,t.jsx)(n.a,{href:"https://www.thethingsindustries.com/docs/integrations/webhooks/scheduling-downlinks/",children:"https://www.thethingsindustries.com/docs/integrations/webhooks/scheduling-downlinks/"})]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"You should use your own data for the API KEY, your-ttn-applicationID and your your_TTN_end_deviceID"})}),"\n",(0,t.jsx)(n.h4,{id:"chirpstack-v3",children:"Chirpstack V3"}),"\n",(0,t.jsx)(n.p,{children:"Curl script to be used with Chirpstack V3:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"curl -X POST --header 'Content-Type: application/json'\n--header 'Accept: application/json'\n--header 'Grpc-Metadata-Authorization:\nBearer xxxxxxxxx_API_KEY_xxxxxxx' -d\n'{ \"deviceQueueItem\": { \"confirmed\": false, \"data\":\n\"U01iQ21kPTAgMC8xMCAqICogKiAqOlIsOTYwMCw4TjE6MDEwMzAwMTYwMDAyLDAxMDMwMDI2MDAwMixmYTA0MDAwNTAwMDE=\",\n\"fPort\": 128\n } }'\n'http://192.198.0.101:8080/api/devices/ChirpStack_DevEUI/queue'\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"You should use your own data for the API KEY, your Chirpstack_IP_Adress and your your_ChirpStack_DevEUI"})}),"\n",(0,t.jsx)(n.h4,{id:"chirpstack-v4",children:"Chirpstack V4"}),"\n",(0,t.jsx)(n.p,{children:'The actual API has now switched from the Swagger API with UI to gRPC integration, but for compatibility and transition\nreasons the chirpstack-rest-api can be installed as an additional component. However, experience has shown that there\nare changes that need to be considered. "deviceQueueItem" became ""queueItem" and by default the API can now be reached\non port 8090 and no longer 8080.'}),"\n",(0,t.jsx)(n.p,{children:"Curl script to be used with Chirpstack V4:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"curl -X POST --header 'Content-Type: application/json'\n--header 'Accept: application/json'\n--header 'Grpc-Metadata-Authorization:\nBearer xxxxxxxxx_API_KEY_xxxxxxx' -d\n'{ \"queueItem\": { \"confirmed\": false, \"data\":\n\"U01iQ21kPTAgMC8xMCAqICogKiAqOlIsOTYwMCw4TjE6MDEwMzAwMTYwMDAyLDAxMDMwMDI2MDAwMixmYTA0MDAwNTAwMDE=\",\n\"fPort\": 128\n } }'\n'http://192.198.0.101:8090/api/devices/ChirpStack_DevEUI/queue'\n"})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{"use strict";i.d(n,{R:()=>s,x:()=>r});var t=i(6540);const o={},a=t.createContext(o);function s(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/54120d1c.965863d4.js b/assets/js/54120d1c.965863d4.js deleted file mode 100644 index 5a5ca46b..00000000 --- a/assets/js/54120d1c.965863d4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2389],{8388:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=s(4848),r=s(8453);const a={sidebar_position:1},i="Description",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Gateway V3",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/"},next:{title:"Gateway Solar",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(n.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(n.p,{children:["Get started by ",(0,t.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Or ",(0,t.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>o});var t=s(6540);const r={},a=t.createContext(r);function i(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/54120d1c.ce0707f7.js b/assets/js/54120d1c.ce0707f7.js new file mode 100644 index 00000000..24c130e3 --- /dev/null +++ b/assets/js/54120d1c.ce0707f7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2389],{8388:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=s(4848),r=s(8453);const a={sidebar_position:1},i="Description",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Gateway V3",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/"},next:{title:"Gateway Solar",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(n.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(n.p,{children:["Get started by ",(0,t.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Or ",(0,t.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>o});var t=s(6540);const r={},a=t.createContext(r);function i(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5734ba63.2f3edc7f.js b/assets/js/5734ba63.2f3edc7f.js new file mode 100644 index 00000000..93816621 --- /dev/null +++ b/assets/js/5734ba63.2f3edc7f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2060],{6051:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>u,contentTitle:()=>c,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var t=n(4848),s=n(8453);const r={sidebar_position:1},c="Device Enclosures",i={id:"components/enclosures/index",title:"Device Enclosures",description:"",source:"@site/docs/components/enclosures/index.md",sourceDirName:"components/enclosures",slug:"/components/enclosures/",permalink:"/iot/components/enclosures/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/enclosures/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"app-hybrid-modbus",permalink:"/iot/components/firmware/app-hybrid-modbus/"},next:{title:"Spelsberg TG PC 1208-6-o",permalink:"/iot/components/enclosures/spelsberg_TG_PC_1208-6-o"}},u={},l=[];function a(e){const o={h1:"h1",...(0,s.R)(),...e.components};return(0,t.jsx)(o.h1,{id:"device-enclosures",children:"Device Enclosures"})}function p(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},8453:(e,o,n)=>{n.d(o,{R:()=>c,x:()=>i});var t=n(6540);const s={},r=t.createContext(s);function c(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5734ba63.c8e76d4d.js b/assets/js/5734ba63.c8e76d4d.js deleted file mode 100644 index 3fa6d5a9..00000000 --- a/assets/js/5734ba63.c8e76d4d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2060],{6051:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>u,contentTitle:()=>c,default:()=>a,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var t=n(4848),s=n(8453);const r={sidebar_position:1},c="Device Enclosures",i={id:"components/enclosures/index",title:"Device Enclosures",description:"",source:"@site/docs/components/enclosures/index.md",sourceDirName:"components/enclosures",slug:"/components/enclosures/",permalink:"/iot/components/enclosures/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/enclosures/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"componentsSidebar",previous:{title:"app-hybrid-modbus",permalink:"/iot/components/firmware/app-hybrid-modbus/"},next:{title:"Spelsberg TG PC 1208-6-o",permalink:"/iot/components/enclosures/spelsberg_TG_PC_1208-6-o"}},u={},l=[];function p(e){const o={h1:"h1",...(0,s.R)(),...e.components};return(0,t.jsx)(o.h1,{id:"device-enclosures",children:"Device Enclosures"})}function a(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},8453:(e,o,n)=>{n.d(o,{R:()=>c,x:()=>i});var t=n(6540);const s={},r=t.createContext(s);function c(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5a4e9d38.5daad482.js b/assets/js/5a4e9d38.5daad482.js new file mode 100644 index 00000000..7b0556f5 --- /dev/null +++ b/assets/js/5a4e9d38.5daad482.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7154],{7035:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>u});var o=t(4848),n=t(8453);const r={sidebar_position:1},a="Modbus Sensors",i={id:"products/sensor-gateways/modbus/index",title:"Modbus Sensors",description:"",source:"@site/docs/products/sensor-gateways/modbus/index.md",sourceDirName:"products/sensor-gateways/modbus",slug:"/products/sensor-gateways/modbus/",permalink:"/iot/products/sensor-gateways/modbus/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/modbus/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Liquid Level",permalink:"/iot/products/sensor-gateways/level/"},next:{title:"Temperature",permalink:"/iot/products/sensor-gateways/temperature/"}},d={},u=[];function c(e){const s={h1:"h1",...(0,n.R)(),...e.components};return(0,o.jsx)(s.h1,{id:"modbus-sensors",children:"Modbus Sensors"})}function p(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var o=t(6540);const n={},r=o.createContext(n);function a(e){const s=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),o.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5a4e9d38.e74ba13a.js b/assets/js/5a4e9d38.e74ba13a.js deleted file mode 100644 index 1add0a55..00000000 --- a/assets/js/5a4e9d38.e74ba13a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7154],{7035:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>u});var o=t(4848),n=t(8453);const r={sidebar_position:1},i="Modbus Sensors",a={id:"products/sensor-gateways/modbus/index",title:"Modbus Sensors",description:"",source:"@site/docs/products/sensor-gateways/modbus/index.md",sourceDirName:"products/sensor-gateways/modbus",slug:"/products/sensor-gateways/modbus/",permalink:"/iot/products/sensor-gateways/modbus/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/modbus/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Liquid Level",permalink:"/iot/products/sensor-gateways/level/"},next:{title:"Temperature",permalink:"/iot/products/sensor-gateways/temperature/"}},d={},u=[];function c(e){const s={h1:"h1",...(0,n.R)(),...e.components};return(0,o.jsx)(s.h1,{id:"modbus-sensors",children:"Modbus Sensors"})}function p(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>a});var o=t(6540);const n={},r=o.createContext(n);function i(e){const s=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),o.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5a6a9bbb.84362c35.js b/assets/js/5a6a9bbb.84362c35.js deleted file mode 100644 index 20c04c7d..00000000 --- a/assets/js/5a6a9bbb.84362c35.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[835],{4125:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var o=t(4848),r=t(8453);const n={sidebar_position:1},a="Workflow",i={id:"products/sensor-gateways/wireless-mbus-g2/manual/workflow",title:"Workflow",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g2/manual/workflow.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g2/manual",slug:"/products/sensor-gateways/wireless-mbus-g2/manual/workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g2/manual/workflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg"},next:{title:"LoRaWAN Bridge V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/"}},u={},l=[];function c(e){const s={h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{id:"workflow",children:"Workflow"}),"\n",(0,o.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var o=t(6540);const r={},n=o.createContext(r);function a(e){const s=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5a6a9bbb.939a7818.js b/assets/js/5a6a9bbb.939a7818.js new file mode 100644 index 00000000..3ac29ae6 --- /dev/null +++ b/assets/js/5a6a9bbb.939a7818.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[835],{4125:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>u});var t=o(4848),r=o(8453);const n={sidebar_position:1},a="Workflow",i={id:"products/sensor-gateways/wireless-mbus-g2/manual/workflow",title:"Workflow",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g2/manual/workflow.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g2/manual",slug:"/products/sensor-gateways/wireless-mbus-g2/manual/workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g2/manual/workflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg"},next:{title:"LoRaWAN Bridge V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/"}},l={},u=[];function c(e){const s={h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"workflow",children:"Workflow"}),"\n",(0,t.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,s,o)=>{o.d(s,{R:()=>a,x:()=>i});var t=o(6540);const r={},n=t.createContext(r);function a(e){const s=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/632479e1.11fcb73b.js b/assets/js/632479e1.11fcb73b.js new file mode 100644 index 00000000..eb45a21b --- /dev/null +++ b/assets/js/632479e1.11fcb73b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3010],{9134:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var s=n(4848),o=n(8453);const r={sidebar_position:1},a="Operation Manual",i={id:"products/sensor-gateways/wired-mbus-g1/manual/index",title:"Operation Manual",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wired-mbus-g1/manual/index.md",sourceDirName:"products/sensor-gateways/wired-mbus-g1/manual",slug:"/products/sensor-gateways/wired-mbus-g1/manual/",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wired-mbus-g1/manual/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Wired M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/"},next:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg"}},u={},c=[];function d(e){const t={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"operation-manual",children:"Operation Manual"}),"\n",(0,s.jsx)(t.p,{children:"Einleitung"})]})}function l(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var s=n(6540);const o={},r=s.createContext(o);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/632479e1.bad890ad.js b/assets/js/632479e1.bad890ad.js deleted file mode 100644 index fdca7c06..00000000 --- a/assets/js/632479e1.bad890ad.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3010],{9134:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var s=n(4848),o=n(8453);const r={sidebar_position:1},a="Operation Manual",i={id:"products/sensor-gateways/wired-mbus-g1/manual/index",title:"Operation Manual",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wired-mbus-g1/manual/index.md",sourceDirName:"products/sensor-gateways/wired-mbus-g1/manual",slug:"/products/sensor-gateways/wired-mbus-g1/manual/",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wired-mbus-g1/manual/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Wired M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/"},next:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg"}},u={},c=[];function d(e){const t={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"operation-manual",children:"Operation Manual"}),"\n",(0,s.jsx)(t.p,{children:"Einleitung"})]})}function l(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var s=n(6540);const o={},r=s.createContext(o);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/63eca40f.4e7e749a.js b/assets/js/63eca40f.4e7e749a.js new file mode 100644 index 00000000..b272a49e --- /dev/null +++ b/assets/js/63eca40f.4e7e749a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[9111],{9844:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var o=t(4848),s=t(8453);const r={sidebar_position:0},i="Knowledge Base",a={id:"knowledge-base/index",title:"Knowledge Base",description:"---",source:"@site/docs/knowledge-base/index.md",sourceDirName:"knowledge-base",slug:"/knowledge-base/",permalink:"/iot/knowledge-base/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/knowledge-base/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"allDocSidebar",previous:{title:"FAQ",permalink:"/iot/platform/faq"},next:{title:"Wireless M-BUS",permalink:"/iot/knowledge-base/wireless-mbus"}},d={},l=[];function c(e){const n={h1:"h1",hr:"hr",p:"p",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"knowledge-base",children:"Knowledge Base"}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.p,{children:"General knowledge."})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var o=t(6540);const s={},r=o.createContext(s);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/653e6c43.4b8fafa6.js b/assets/js/653e6c43.4b8fafa6.js deleted file mode 100644 index 2497c4dc..00000000 --- a/assets/js/653e6c43.4b8fafa6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8774],{6472:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>u,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var o=n(4848),s=n(8453);const r={sidebar_position:1},a="Configuration",i={id:"products/sensor-gateways/wired-mbus-g1/manual/cfg",title:"Configuration",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wired-mbus-g1/manual/cfg.md",sourceDirName:"products/sensor-gateways/wired-mbus-g1/manual",slug:"/products/sensor-gateways/wired-mbus-g1/manual/cfg",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wired-mbus-g1/manual/cfg.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/"},next:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow"}},u={},c=[];function d(t){const e={h1:"h1",p:"p",...(0,s.R)(),...t.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.h1,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsx)(e.p,{children:"Einleitung"})]})}function l(t={}){const{wrapper:e}={...(0,s.R)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(d,{...t})}):d(t)}},8453:(t,e,n)=>{n.d(e,{R:()=>a,x:()=>i});var o=n(6540);const s={},r=o.createContext(s);function a(t){const e=o.useContext(r);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:a(t.components),o.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/653e6c43.b2a8d5c8.js b/assets/js/653e6c43.b2a8d5c8.js new file mode 100644 index 00000000..3e2a4b73 --- /dev/null +++ b/assets/js/653e6c43.b2a8d5c8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8774],{6472:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>u,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var o=n(4848),s=n(8453);const r={sidebar_position:1},a="Configuration",i={id:"products/sensor-gateways/wired-mbus-g1/manual/cfg",title:"Configuration",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wired-mbus-g1/manual/cfg.md",sourceDirName:"products/sensor-gateways/wired-mbus-g1/manual",slug:"/products/sensor-gateways/wired-mbus-g1/manual/cfg",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wired-mbus-g1/manual/cfg.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/"},next:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow"}},u={},c=[];function d(t){const e={h1:"h1",p:"p",...(0,s.R)(),...t.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.h1,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsx)(e.p,{children:"Einleitung"})]})}function l(t={}){const{wrapper:e}={...(0,s.R)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(d,{...t})}):d(t)}},8453:(t,e,n)=>{n.d(e,{R:()=>a,x:()=>i});var o=n(6540);const s={},r=o.createContext(s);function a(t){const e=o.useContext(r);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:a(t.components),o.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/65f81c15.395e052b.js b/assets/js/65f81c15.395e052b.js new file mode 100644 index 00000000..c6cee7a3 --- /dev/null +++ b/assets/js/65f81c15.395e052b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1552],{7709:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>l});var a=n(4848),s=n(8453);const i={sidebar_position:5,title:"LoRaWAN Communication"},o="LoRaWAN Communication",r={id:"components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol",title:"LoRaWAN Communication",description:"The Gateway can use LoRaWAN as Uplink technology for forwarding received wireless M-BUS telegrams to any network server.",source:"@site/docs/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol.md",sourceDirName:"components/firmware/app-nrf9160-wmbus",slug:"/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol",permalink:"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,title:"LoRaWAN Communication"},sidebar:"allDocSidebar",previous:{title:"Configuration Parameter",permalink:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter"},next:{title:"Cellular IoT Communication",permalink:"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol"}},d={},l=[{value:"Uplink Payload Formats",id:"uplink-payload-formats",level:2},{value:"Status Packet (Port 1)",id:"status-packet-port-1",level:3},{value:"Data Packet (PayloadFormat 0)",id:"data-packet-payloadformat-0",level:3},{value:"Examples",id:"examples",level:4},{value:"Length 48 Byte wMBUS telegram",id:"length-48-byte-wmbus-telegram",level:5},{value:"Length 75 byte wMBUS telegram",id:"length-75-byte-wmbus-telegram",level:5},{value:"Length 101 byte wMBUS telegram",id:"length-101-byte-wmbus-telegram",level:5},{value:"Data Packet (PayloadFormat 1)",id:"data-packet-payloadformat-1",level:3},{value:"Data Packet (PayloadFormat 2)",id:"data-packet-payloadformat-2",level:3},{value:"Examples",id:"examples-1",level:3},{value:"PayloadFormat 1",id:"payloadformat-1",level:4},{value:"PayloadFormat 2",id:"payloadformat-2",level:4},{value:"Upload Speed / Duration",id:"upload-speed--duration",level:2},{value:"Downlink Payload Formats",id:"downlink-payload-formats",level:2},{value:"LoRaWAN Downlink Ports",id:"lorawan-downlink-ports",level:3},{value:"Remote Configuration",id:"remote-configuration",level:3},{value:"Firmware Control Commands",id:"firmware-control-commands",level:3},{value:"Ad-hoc-readout",id:"ad-hoc-readout",level:4},{value:"Decoding wMBUS telegrams",id:"decodewmbus",level:2},{value:"Example JS parser",id:"example-js-parser",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"lorawan-communication",children:"LoRaWAN Communication"}),"\n",(0,a.jsx)(t.p,{children:"The Gateway can use LoRaWAN as Uplink technology for forwarding received wireless M-BUS telegrams to any network server."}),"\n",(0,a.jsx)(t.admonition,{title:"common misunderstanding",type:"note",children:(0,a.jsxs)(t.p,{children:["Products based on this firmware are ",(0,a.jsx)(t.strong,{children:"not"})," LoRaWAN Gateways. Thus, other LoRaWAN Devices / Sensors can not be received.\nIn fact the firmware acts itself as LoRaWAN node and ",(0,a.jsx)(t.strong,{children:"needs"})," an external LoRaWAN network which consists of one are\nmore LoRaWAN Gateways."]})}),"\n",(0,a.jsx)(t.h2,{id:"uplink-payload-formats",children:"Uplink Payload Formats"}),"\n",(0,a.jsx)(t.p,{children:"After collecting wireless M-Bus telegrams over the air, the Bridge starts uploading data via LoRaWAN. There exist two\ndata formats that are transmitted over different LoRaWAN ports. As LoRaWAN can only transmit very short messages, the\nmessage formats contain only data bytes. The meaning of a byte is determined by its position within a message. The\nfollowing describes the package formats used by the wireless M-Bus Bridge."}),"\n",(0,a.jsxs)(t.p,{children:["M-Bus telegrams can be longer as the maximal size of a LoRaWAN-Message. For this cases, the firmware needs to split a\ntelegram into multiple pieces and upload it using multiple LoRaWAN-Messages. There are two different methods this is\ndone, according to the payload pormat you set in the ",(0,a.jsx)(t.a,{href:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter#lorawanparams",children:"firmware configuration"}),"."]}),"\n",(0,a.jsxs)(t.p,{children:["A configuration with ",(0,a.jsx)(t.code,{children:"PayloadFormat = 0"})," is focused on easy reassembly of the pieces. The parts are encoded by port\nnumbers and the data can\njust be concatenated together. Payload Formats 1 and 2 add additional information to the telegram. They focus on putting\nas much of a telegram in a single LoRaWAN-Message as possible with respecting the current Spreading Factor."]}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{style:{textAlign:"center"},children:"LoRaWAN Port"}),(0,a.jsxs)(t.th,{children:[(0,a.jsx)(t.code,{children:"PayloadFormat"})," Configuration"]}),(0,a.jsx)(t.th,{children:"Uplink Message"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"center"},children:"1"}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"any"})}),(0,a.jsx)(t.td,{children:"Status Message"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"center"},children:"11-99"}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"0"})}),(0,a.jsx)(t.td,{children:"Default PayloadFormat. Part of split telegrams is encoded in Port (e.g. Port 24 = Telegram 2 of 4)."})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"center"},children:"101"}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"1"})}),(0,a.jsx)(t.td,{children:"Data Message with timestamp and without RSSI. Part of split telegrams is encoded in payload."})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"center"},children:"102"}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"2"})}),(0,a.jsx)(t.td,{children:"Data Message with timestamp and with RSSI. Part of split telegrams is encoded in payload."})]})]})]}),"\n",(0,a.jsx)(t.h3,{id:"status-packet-port-1",children:"Status Packet (Port 1)"}),"\n",(0,a.jsxs)(t.p,{children:["In order to provide some information about the health & connectivity state of the device itself, the device\nsends a status update at a daily basis. The status packet is sent on the first upload phase after activation of the\ndevice (after reboot) and then repeatedly in every upload phase that takes place a day or longer after the previous\nstatus packet. It has a length of 7 or 8 bytes. The battery voltages and ambient temperature are encodes as 16 bit\ninteger using ",(0,a.jsx)(t.strong,{children:"little endian encoding"}),"."]}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Field"}),(0,a.jsx)(t.th,{children:"Type"}),(0,a.jsx)(t.th,{children:"Bytes"}),(0,a.jsx)(t.th,{children:"Description"}),(0,a.jsx)(t.th,{children:"Example"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"version"}),(0,a.jsx)(t.td,{children:"uint8[3]"}),(0,a.jsx)(t.td,{children:"0-2"}),(0,a.jsx)(t.td,{children:"Firmware Version"}),(0,a.jsx)(t.td,{children:"1, 5, 1 \u2261 v1.5.1"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"v_bat"}),(0,a.jsx)(t.td,{children:"uint16"}),(0,a.jsx)(t.td,{children:"3-4"}),(0,a.jsx)(t.td,{children:"Battery Voltage [mV]"}),(0,a.jsx)(t.td,{children:"2947 \u2261 2.947V"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"temp"}),(0,a.jsx)(t.td,{children:"int16"}),(0,a.jsx)(t.td,{children:"5-6"}),(0,a.jsx)(t.td,{children:"Temperature [1/10 \xb0C]"}),(0,a.jsx)(t.td,{children:"246 \u2261 24.6\xb0C"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"flag"}),(0,a.jsx)(t.td,{children:"int8"}),(0,a.jsx)(t.td,{children:"7"}),(0,a.jsx)(t.td,{children:"Internal Flag"}),(0,a.jsx)(t.td,{children:"0x01"})]})]})]}),"\n",(0,a.jsx)(t.h3,{id:"data-packet-payloadformat-0",children:"Data Packet (PayloadFormat 0)"}),"\n",(0,a.jsx)(t.p,{children:"After each wMBUS collecting phase, all saved telegrams will be uploaded via LoRaWAN uplink\nmessages as fast as possible. The received wMBUS telegrams that did pass the configured filters will be\nuploaded without any modification in one or more LoRaWAN messages."}),"\n",(0,a.jsx)(t.p,{children:"If a wMBUS telegram is bigger than the bridge\nconfiguration parameter loraMaxMsgSize the transmission will be done using multiple LoRaWAN messages. This parameter is\nlimited to \u2264 50 bytes due to LoRaWANs maximum payload size restrictions. In case of telegram splitting is needed the\nreceiving backend application server as to reassemble the original wMBUS telegram before decryption & parsing of the\nmeter data. This is done by simply joining the messages together in the order of receive. The LoRaWAN port encodes\nidentifies a LoRaWAN fragment of the original wireless M-Bus telegram. This way partial messages can be identified using\nthe LoRaWAN Port:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"10 < LoRaWAN Port < 100 \u2261 (Part Number | Total Parts)"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Gaps in the LoRaWAN Frame Counter are giving a hint for missing telegram parts which can happen in LoRaWAN since it's a\nALOHA based protocol, e.g. collisions and some packet losses are accepted by principle of operation. In case the backend\nnoticed a missing packet the wMBUS telegram can't be assembled anymore as described before."}),"\n",(0,a.jsx)(t.h4,{id:"examples",children:"Examples"}),"\n",(0,a.jsxs)(t.p,{children:["With a configuration of ",(0,a.jsx)(t.code,{children:"loraMaxMsgSize"})," = 50:"]}),"\n",(0,a.jsx)(t.h5,{id:"length-48-byte-wmbus-telegram",children:"Length 48 Byte wMBUS telegram"}),"\n",(0,a.jsx)(t.p,{children:"Will be send on LoRaWAN port 11. Port 11 says it is the first message of only one message (no splitting)."}),"\n",(0,a.jsx)(t.h5,{id:"length-75-byte-wmbus-telegram",children:"Length 75 byte wMBUS telegram"}),"\n",(0,a.jsx)(t.p,{children:"Will be send in two messages on LoRaWAN ports 12 and 22. Port 12 means this part one of a wMBUS telegram that got\nsplitted into two LoRaWAN messages. Port 22 means that this data is the 2nd part of the original wMBUS data. Both parts\nhave to been concatenated in the order of receive by the backend."}),"\n",(0,a.jsx)(t.h5,{id:"length-101-byte-wmbus-telegram",children:"Length 101 byte wMBUS telegram"}),"\n",(0,a.jsx)(t.p,{children:"Will be send in three messages on LoRaWAN ports 13, 23 and 33. Port 13 means this part one of a wMBUS telegram that got\nsplitted into three LoRaWAN messages. Port 23 means that this data is the 2nd part of the original wMBUS data. Port 33\nmeans that this data is the 3rd part of the original wMBUS data. All three parts have to been concatenated in the order\nof receive by the backend."}),"\n",(0,a.jsx)(t.h3,{id:"data-packet-payloadformat-1",children:"Data Packet (PayloadFormat 1)"}),"\n",(0,a.jsxs)(t.p,{children:["When using Payload Format 1, collected telegrams are uploaded on single port 101 ",(0,a.jsx)(t.strong,{children:"without RSSI"})," (of received wmbus\ntelegram) information. For each telegram there will be\nadded the timestamp of reception. The first byte of messages on Port 101 encodes splitting of messages as follows."]}),"\n",(0,a.jsxs)(t.p,{children:["Every Uplink on Port 101 is prefixed with a single byte, where the least significant Bit indicates if that Uplink is the\nfirst part of a message, and the second least significant Bit indicates if that Uplink is the last part or a message. So\nthere are 4 different possible values for the ",(0,a.jsx)(t.strong,{children:"first Byte"})," of an Uplink on Port 101:"]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["0x03:","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"This Uplink is both first and final part of a message. So the remaining Bytes in this Uplink contain the whole\nmessage."}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["0x02:","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"This Uplink is the last but not the first part of a message. There has been at least one Uplink before this one,\nthat contained data that needs to be prepended to the current Uplink in order to get the full Message"}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["0x01:","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"This Uplink is the first but not the last part of a message. There follows at least one Uplink that contains more\ndata to be appended to the current's data in order to get the full message."}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["0x00:","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"This Uplink is neither first nor last part of a message. There has been at least one Uplink before this one that\ncontains more data of the current Message, and there follows at least one more Uplink with data for this Message."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"So each message sent on Port 101, whether it is contained in a single Uplink or spread over multiple ones, starts with\nan Uplink where the least significant Bit of the first Byte is set. Each Message ends with an Uplink where the second\nleast significant Bit of the first Byte is set. In cases where the Message fits in a single Uplink, that Uplink is both\nfirst and last Uplink, and therefore both Bits are set."}),"\n",(0,a.jsx)(t.p,{children:"The combination of those two Bits and the Frame Counter of the Uplinks makes it possible to upload Messages of any\nlength while allowing the receiving side to know exactly if a Message has been transferred completely, or if part of it\nis missing (when there are Frame Counter values missing)."}),"\n",(0,a.jsx)(t.p,{children:"The Bridge puts as many Bytes in each Uplink as possible for the current Spreading Factor, even if the Spreading Factor\nchanges between Uplinks because of ADR."}),"\n",(0,a.jsx)(t.p,{children:"When the data of all Uplinks that are part of a single Message are appended in order of reception (after removing the\nfirst Byte of each Uplink), you get the payload Data of a full message."}),"\n",(0,a.jsx)(t.p,{children:"The Payload Data after reassembly of the split parts consists of a 5 Byte Timestamp, that marks the point in time the\nBridge did receive that telegram, followed by the Data of the Telegram. The Timestamp follows the convention of all our\n40bit-Timestamps; you can find the details under Timestamp in our LoRaWAN Background Information."}),"\n",(0,a.jsx)(t.h3,{id:"data-packet-payloadformat-2",children:"Data Packet (PayloadFormat 2)"}),"\n",(0,a.jsx)(t.p,{children:"Upload Format 2 works like Upload Format 1, with the same logic for splitting messages, but uploads are sent on port"}),"\n",(0,a.jsxs)(t.ol,{start:"102",children:["\n",(0,a.jsx)(t.li,{children:"The Payload consists of a 5 Byte Timestamp marking the time of reception, followed by a uint_8 that holds the (\nnegated) RSSI value for that reception, followed by the data of the Telegram."}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"examples-1",children:"Examples"}),"\n",(0,a.jsxs)(t.p,{children:["For easier understanding, the wMBus-Telegram in the examples will always be ",(0,a.jsx)(t.code,{children:"0102030405060708090a0b0c0d0e0f"})," (15 Byte)."]}),"\n",(0,a.jsx)(t.h4,{id:"payloadformat-1",children:"PayloadFormat 1"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-graphql",metastring:'title="A message sent in a single Uplink"',children:"# An Uplink of 21 Bytes on Port 101:\n'03005e53f31a0102030405060708090a0b0c0d0e0f'\n# Analised:\n'03' -> First and Last Uplink of Message -> complete Message in this Uplink\n'005e53f31a' -> Unix Timestamp 1582560026 -> 2020-02-24T16:00:26 UTC\n'0102030405060708090a0b0c0d0e0f' -> wMBus Telegram\n"})}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-graphql",metastring:'title="A message split over two Uplinks"',children:"# An Uplink of 11 Bytes on Port 101, Frame Counter 341:\n'01005e53f31a0102030405'\n'01' -> First Uplink of Message, more Uplinks follow\n'05e53f31a0102030405' -> First Part of Message Data.\n# Another Uplink of 11 Bytes on Port 101, Frame Counter 342:\n'02060708090a0b0c0d0e0f'\n'02' -> Last (but not first) Uplink of Message.\n'060708090a0b0c0d0e0f' -> Second and final Part of Message Data.\n# We Received a 'first' Part with Frame Counter 341 and a 'last'\n# Part with Frame Counter 342, so we know we did not miss any\n# Parts in between. We can now assembly the complete payload:\n'05e53f31a0102030405060708090a0b0c0d0e0f'\n# Payload anaylsed:\n'005e53f31a' -> Unix Timestamp 1582560026 -> 2020-02-24T16:00:26 UTC\n'0102030405060708090a0b0c0d0e0f' -> wMBus Telegram\n"})}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-graphql",metastring:'title="A message split over three Uplinks"',children:"# An Uplink of 8 Bytes on Port 101, Frame Counter 519:\n'01005e53f31a0102'\n'01' -> First Uplink of Message, more Uplinks follow\n'05e53f31a0102' -> First Part of Message Data.\n# Another Uplink of 8 Bytes on Port 101, Frame Counter 520:\n'0003040506070809'\n'00' -> Middle Part of Message, there have been some Parts already, more Uplinks follow\n'03040506070809' -> Second Part of Message Data.\n# Another Uplink of 7 Bytes on Port 101, Frame Counter 521:\n'020a0b0c0d0e0f'\n'02' -> Last (but not first) Uplink of Message.\n'0a0b0c0d0e0f' -> Third and final Part of Message Data.\n# Frame Counters are consecuetive, so the complete Message is:\n'05e53f31a0102030405060708090a0b0c0d0e0f'\n"})}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-graphql",metastring:'title="Uplinks with a missing a Part""',children:"# An Uplink of 8 Bytes on Port 101, Frame Counter 123:\n'01005e53f31a0102'\n'01' -> First Uplink of Message, more Uplinks follow\n'05e53f31a0102' -> First Part of Message Data.\n# Another Uplink of 7 Bytes on Port 101, Frame Counter 125:\n'020a0b0c0d0e0f'\n'02' -> Last (but not first) Uplink of Message.\n'0a0b0c0d0e0f' -> Third and final Part of Message Data.\n# Frame Counter indicates, that a Part in the middle is missing,\n# so we have to drop the Message.\n"})}),"\n",(0,a.jsx)(t.h4,{id:"payloadformat-2",children:"PayloadFormat 2"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-graphql",metastring:'title="A message sent in a single Uplink"',children:"# An Uplink of 8 Bytes on Port 101, Frame Counter 123:\n'01005e53f31a0102'\n'01' -> First Uplink of Message, more Uplinks follow\n'05e53f31a0102' -> First Part of Message Data.\n# Another Uplink of 7 Bytes on Port 101, Frame Counter 125:\n'020a0b0c0d0e0f'\n'02' -> Last (but not first) Uplink of Message.\n'0a0b0c0d0e0f' -> Third and final Part of Message Data.\n# Frame Counter indicates, that a Part in the middle is missing,\n# so we have to drop the Message.\n"})}),"\n",(0,a.jsx)(t.h2,{id:"upload-speed--duration",children:"Upload Speed / Duration"}),"\n",(0,a.jsx)(t.p,{children:"The firmware has to work in compliance with the European SRD 868 1% duty-cycle regulations. This implies as a rule of\nthumb the device can upload at most wireless M-BUS telegrams via LoRaWAN for 36 seconds every hour."}),"\n",(0,a.jsx)(t.p,{children:"The actual transmit time ('ToA: time on air') for each LoRaWAN message depends on the byte size and the used LoRa\nspreading factor (SF) which defines how redundant LoRa data is send. This means a device with good connectivity and\nconsequently using LoRa SF7 (ToA \u2264 0,050s) can upload much faster more data than a node using LoRa SF11 (ToA \u2265 1s) due\nto a hard to reach LoRaWAN gateway. The bridge will upload in conformity with the regulations automatically as fast as\npossible. When it has to wait it enters a low power sleep mode until the next transmission is possible again. The next\ndata collection phase will be started only after completion of the previous upload phase in respect to the configured\nlistenCron parameter. Because of this it is advisable to define the cron parameter with an estimation of the upload\nduration in mind. This will avoid unexpected 'skipping' of data collection phases."}),"\n",(0,a.jsx)(t.h2,{id:"downlink-payload-formats",children:"Downlink Payload Formats"}),"\n",(0,a.jsx)(t.h3,{id:"lorawan-downlink-ports",children:"LoRaWAN Downlink Ports"}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Port"}),(0,a.jsx)(t.th,{children:"Message"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"128"}),(0,a.jsx)(t.td,{children:"Remote Confiuration"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"132"}),(0,a.jsx)(t.td,{children:"Firmware Control Commands"})]})]})]}),"\n",(0,a.jsx)(t.h3,{id:"remote-configuration",children:"Remote Configuration"}),"\n",(0,a.jsxs)(t.p,{children:["The remote configuration follows the general ",(0,a.jsx)(t.a,{href:"/iot/configuration/lorawan-downlink-config",children:"Lobaro protocol"})," for over the\nair configuration using LoRaWAN."]}),"\n",(0,a.jsx)(t.admonition,{title:"in depth description",type:"tip",children:(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.a,{href:"/iot/configuration/lorawan-downlink-config",children:"Read more"})," about LoRaWAN based downlink configuration."]})}),"\n",(0,a.jsx)(t.h3,{id:"firmware-control-commands",children:"Firmware Control Commands"}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Port"}),(0,a.jsx)(t.th,{children:"Action"}),(0,a.jsx)(t.th,{children:"DL Payload (ASCII)"}),(0,a.jsx)(t.th,{children:"DL Payload (Hex)"}),(0,a.jsx)(t.th,{children:"DL Payload (Base64)"})]})}),(0,a.jsx)(t.tbody,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"132"}),(0,a.jsx)(t.td,{children:"Ad-hoc-readout"}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"read"})}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"72656164"})}),(0,a.jsxs)(t.td,{children:[(0,a.jsx)(t.code,{children:"cmVhZA"}),"=="]})]})})]}),"\n",(0,a.jsx)(t.h4,{id:"ad-hoc-readout",children:"Ad-hoc-readout"}),"\n",(0,a.jsx)(t.p,{children:"A downlink that triggers an Ad hoc readout, independent of CRON triggers. The Ad-hoc readout is using the same\nparameters (filters and listening duration) as a CRON triggered readout."}),"\n",(0,a.jsx)(t.h2,{id:"decodewmbus",children:"Decoding wMBUS telegrams"}),"\n",(0,a.jsx)(t.p,{children:"After receiving and reassemble the raw wireless M-Bus telegrams from your LoRaWAN network provider the actual metering data has to be\ndecrypted and decoded by a backend service for further processing. The details of this are described in the EN 13757\nnorm and the newer OMS specification, which is a clarification of the original underlying norm."}),"\n",(0,a.jsx)(t.p,{children:"A universal wireless M-Bus decoder is a relatively complicated piece of software if you start implementing it from\nscratch since the norm covers many different use cases, units, meter types and data formats. If you know in advance the\nexact telegram format of the deployed meters in your setup a hard coded data decoding may be a feasible approach. This\nis because wireless M-Bus devices often send the same telegram format in every transmission. Please contact the\nmanufacturer of your meters for the needed telegram format details."}),"\n",(0,a.jsxs)(t.admonition,{title:"Lobaro wireless M-BUS parser",type:"tip",children:[(0,a.jsxs)(t.p,{children:["An an alternative to support a quick evaluation of our hardware Lobaro offers a easy to use\nwebservice (",(0,a.jsx)(t.a,{href:"https://www.mbus.org",children:"mbus.org"}),") which is designed\nto decode all sorts of wMBUS input data including decryption if the correct key has been provided. You can access the\ndecoder service for free during testing. The API can be licensed for production usages."]}),(0,a.jsx)(t.p,{children:"Since wireless MBUS is a complex and grown specification some meters may fail to decode correctly. We try to fix any\ndecoding issues as quickly as possible if you report us problems with your specific wMBUS device."})]}),"\n",(0,a.jsx)(t.h2,{id:"example-js-parser",children:"Example JS parser"}),"\n",(0,a.jsxs)(t.p,{children:["This parser may be used to decode the status message of this firmware send over LoRaWAN. For decoding wireless M-BUS telegram data see\nthe above ",(0,a.jsx)(t.a,{href:"#decodewmbus",children:"documentation"})," about this topic."]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-tsx",metastring:'title="Status message LoRaWAN parser (Java-Script)"',children:'function readVersion(bytes, i) {\n if (bytes.length < 3) {\n return null;\n }\n return "v" + bytes[i] + "." + bytes[i + 1] + "." + bytes[i + 2];\n}\n\nfunction parse_sint16(bytes, idx) {\n bytes = bytes.slice(idx || 0);\n var t = bytes[0] << 8 | bytes[1] << 0;\n if ((t & 1 << 15) > 0) { // temp is negative (16bit 2\'s complement)\n t = ((~t) & 0xffff) + 1; // invert 16bits & add 1 => now positive value\n t = t * -1;\n }\n return t;\n}\n\nfunction Decoder(bytes, port) {\n // Decode an uplink message from a buffer\n // (array) of bytes to an object of fields.\n var decoded = {};\n\n if (port === 9) {\n decoded.devStatus = bytes[0];\n decoded.devID = bytes[1] | bytes[2] << 8 | bytes[3] << 16 | bytes[4] << 24;\n decoded.dif = bytes[5];\n decoded.vif = bytes[6];\n decoded.data0 = bytes[7];\n decoded.data1 = bytes[8];\n decoded.data2 = bytes[9];\n }\n\n // example decoder for status packet by lobaro\n if (port === 1 && bytes.length == 9) { // status packet - old\n decoded.FirmwareVersion = String.fromCharCode.apply(null, bytes.slice(0, 5)); // byte 0-4\n decoded.Vbat = (bytes[5] | bytes[6] << 8) / 1000.0; // byte 6-7 (originally in mV)\n decoded.Temp = parse_sint16(bytes, 7) / 10.0; // byte 8-9 (originally in 10th degree C)\n decoded.msg = "Firmware Version: v" + decoded.FirmwareVersion + " Battery: " + decoded.Vbat + "V Temperature: " + decoded.Temp + "\xb0C";\n } else if (port === 1 && bytes.length >= 7) {\n decoded.FirmwareVersion = readVersion(bytes, 0); // byte 0-2\n decoded.Vbat = (bytes[3] | bytes[4] << 8) / 1000.0; // originally in mV\n decoded.Temp = parse_sint16(bytes, 5) / 10.0; // byte 8-9 (originally in 10th degree C)\n decoded.msg = "Firmware Version: " + decoded.FirmwareVersion + " Battery: " + decoded.Vbat + "V Temperature: " + decoded.Temp + "\xb0C";\n if (bytes.length == 8) { // added in v2.5.0\n decoded.Flags = bytes[7];\n }\n }\n\n\n return decoded;\n}\n\n// Wrapper for Lobaro Platform\nfunction Parse(input) {\n // Decode an incoming message to an object of fields.\n var b = bytes(atob(input.data));\n var decoded = Decoder(b, input.fPort);\n\n return decoded;\n}\n\n// Wrapper for Loraserver / ChirpStack\nfunction Decode(fPort, bytes) {\n return Decoder(bytes, fPort);\n}\n\n// Wrapper for Digimondo niota.io\n// Uncomment only when used in niota!\n/*\nmodule.exports = function (payload, meta) {\n const port = meta.lora.fport;\n const buf = Buffer.from(payload, \'hex\');\n \n return Decoder(buf, port);\n}*/\n'})})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>r});var a=n(6540);const s={},i=a.createContext(s);function o(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/65f81c15.4c0aeab9.js b/assets/js/65f81c15.4c0aeab9.js deleted file mode 100644 index 465cfe8f..00000000 --- a/assets/js/65f81c15.4c0aeab9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1552],{7709:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>l});var a=n(4848),s=n(8453);const i={sidebar_position:5,displayed_sidebar:"componentsSidebar",title:"LoRaWAN Communication"},o="LoRaWAN Communication",r={id:"components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol",title:"LoRaWAN Communication",description:"The Gateway can use LoRaWAN as Uplink technology for forwarding received wireless M-BUS telegrams to any network server.",source:"@site/docs/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol.md",sourceDirName:"components/firmware/app-nrf9160-wmbus",slug:"/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol",permalink:"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,displayed_sidebar:"componentsSidebar",title:"LoRaWAN Communication"},sidebar:"componentsSidebar",previous:{title:"Configuration Parameter",permalink:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter"},next:{title:"Cellular IoT Communication",permalink:"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol"}},d={},l=[{value:"Uplink Payload Formats",id:"uplink-payload-formats",level:2},{value:"Status Packet (Port 1)",id:"status-packet-port-1",level:3},{value:"Data Packet (PayloadFormat 0)",id:"data-packet-payloadformat-0",level:3},{value:"Examples",id:"examples",level:4},{value:"Length 48 Byte wMBUS telegram",id:"length-48-byte-wmbus-telegram",level:5},{value:"Length 75 byte wMBUS telegram",id:"length-75-byte-wmbus-telegram",level:5},{value:"Length 101 byte wMBUS telegram",id:"length-101-byte-wmbus-telegram",level:5},{value:"Data Packet (PayloadFormat 1)",id:"data-packet-payloadformat-1",level:3},{value:"Data Packet (PayloadFormat 2)",id:"data-packet-payloadformat-2",level:3},{value:"Examples",id:"examples-1",level:3},{value:"PayloadFormat 1",id:"payloadformat-1",level:4},{value:"PayloadFormat 2",id:"payloadformat-2",level:4},{value:"Upload Speed / Duration",id:"upload-speed--duration",level:2},{value:"Downlink Payload Formats",id:"downlink-payload-formats",level:2},{value:"LoRaWAN Downlink Ports",id:"lorawan-downlink-ports",level:3},{value:"Remote Configuration",id:"remote-configuration",level:3},{value:"Firmware Control Commands",id:"firmware-control-commands",level:3},{value:"Ad-hoc-readout",id:"ad-hoc-readout",level:4},{value:"Decoding wMBUS telegrams",id:"decodewmbus",level:2},{value:"Example JS parser",id:"example-js-parser",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"lorawan-communication",children:"LoRaWAN Communication"}),"\n",(0,a.jsx)(t.p,{children:"The Gateway can use LoRaWAN as Uplink technology for forwarding received wireless M-BUS telegrams to any network server."}),"\n",(0,a.jsx)(t.admonition,{title:"common misunderstanding",type:"note",children:(0,a.jsxs)(t.p,{children:["Products based on this firmware are ",(0,a.jsx)(t.strong,{children:"not"})," LoRaWAN Gateways. Thus, other LoRaWAN Devices / Sensors can not be received.\nIn fact the firmware acts itself as LoRaWAN node and ",(0,a.jsx)(t.strong,{children:"needs"})," an external LoRaWAN network which consists of one are\nmore LoRaWAN Gateways."]})}),"\n",(0,a.jsx)(t.h2,{id:"uplink-payload-formats",children:"Uplink Payload Formats"}),"\n",(0,a.jsx)(t.p,{children:"After collecting wireless M-Bus telegrams over the air, the Bridge starts uploading data via LoRaWAN. There exist two\ndata formats that are transmitted over different LoRaWAN ports. As LoRaWAN can only transmit very short messages, the\nmessage formats contain only data bytes. The meaning of a byte is determined by its position within a message. The\nfollowing describes the package formats used by the wireless M-Bus Bridge."}),"\n",(0,a.jsxs)(t.p,{children:["M-Bus telegrams can be longer as the maximal size of a LoRaWAN-Message. For this cases, the firmware needs to split a\ntelegram into multiple pieces and upload it using multiple LoRaWAN-Messages. There are two different methods this is\ndone, according to the payload pormat you set in the ",(0,a.jsx)(t.a,{href:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter#lorawanparams",children:"firmware configuration"}),"."]}),"\n",(0,a.jsxs)(t.p,{children:["A configuration with ",(0,a.jsx)(t.code,{children:"PayloadFormat = 0"})," is focused on easy reassembly of the pieces. The parts are encoded by port\nnumbers and the data can\njust be concatenated together. Payload Formats 1 and 2 add additional information to the telegram. They focus on putting\nas much of a telegram in a single LoRaWAN-Message as possible with respecting the current Spreading Factor."]}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{style:{textAlign:"center"},children:"LoRaWAN Port"}),(0,a.jsxs)(t.th,{children:[(0,a.jsx)(t.code,{children:"PayloadFormat"})," Configuration"]}),(0,a.jsx)(t.th,{children:"Uplink Message"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"center"},children:"1"}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"any"})}),(0,a.jsx)(t.td,{children:"Status Message"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"center"},children:"11-99"}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"0"})}),(0,a.jsx)(t.td,{children:"Default PayloadFormat. Part of split telegrams is encoded in Port (e.g. Port 24 = Telegram 2 of 4)."})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"center"},children:"101"}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"1"})}),(0,a.jsx)(t.td,{children:"Data Message with timestamp and without RSSI. Part of split telegrams is encoded in payload."})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"center"},children:"102"}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"2"})}),(0,a.jsx)(t.td,{children:"Data Message with timestamp and with RSSI. Part of split telegrams is encoded in payload."})]})]})]}),"\n",(0,a.jsx)(t.h3,{id:"status-packet-port-1",children:"Status Packet (Port 1)"}),"\n",(0,a.jsxs)(t.p,{children:["In order to provide some information about the health & connectivity state of the device itself, the device\nsends a status update at a daily basis. The status packet is sent on the first upload phase after activation of the\ndevice (after reboot) and then repeatedly in every upload phase that takes place a day or longer after the previous\nstatus packet. It has a length of 7 or 8 bytes. The battery voltages and ambient temperature are encodes as 16 bit\ninteger using ",(0,a.jsx)(t.strong,{children:"little endian encoding"}),"."]}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Field"}),(0,a.jsx)(t.th,{children:"Type"}),(0,a.jsx)(t.th,{children:"Bytes"}),(0,a.jsx)(t.th,{children:"Description"}),(0,a.jsx)(t.th,{children:"Example"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"version"}),(0,a.jsx)(t.td,{children:"uint8[3]"}),(0,a.jsx)(t.td,{children:"0-2"}),(0,a.jsx)(t.td,{children:"Firmware Version"}),(0,a.jsx)(t.td,{children:"1, 5, 1 \u2261 v1.5.1"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"v_bat"}),(0,a.jsx)(t.td,{children:"uint16"}),(0,a.jsx)(t.td,{children:"3-4"}),(0,a.jsx)(t.td,{children:"Battery Voltage [mV]"}),(0,a.jsx)(t.td,{children:"2947 \u2261 2.947V"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"temp"}),(0,a.jsx)(t.td,{children:"int16"}),(0,a.jsx)(t.td,{children:"5-6"}),(0,a.jsx)(t.td,{children:"Temperature [1/10 \xb0C]"}),(0,a.jsx)(t.td,{children:"246 \u2261 24.6\xb0C"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"flag"}),(0,a.jsx)(t.td,{children:"int8"}),(0,a.jsx)(t.td,{children:"7"}),(0,a.jsx)(t.td,{children:"Internal Flag"}),(0,a.jsx)(t.td,{children:"0x01"})]})]})]}),"\n",(0,a.jsx)(t.h3,{id:"data-packet-payloadformat-0",children:"Data Packet (PayloadFormat 0)"}),"\n",(0,a.jsx)(t.p,{children:"After each wMBUS collecting phase, all saved telegrams will be uploaded via LoRaWAN uplink\nmessages as fast as possible. The received wMBUS telegrams that did pass the configured filters will be\nuploaded without any modification in one or more LoRaWAN messages."}),"\n",(0,a.jsx)(t.p,{children:"If a wMBUS telegram is bigger than the bridge\nconfiguration parameter loraMaxMsgSize the transmission will be done using multiple LoRaWAN messages. This parameter is\nlimited to \u2264 50 bytes due to LoRaWANs maximum payload size restrictions. In case of telegram splitting is needed the\nreceiving backend application server as to reassemble the original wMBUS telegram before decryption & parsing of the\nmeter data. This is done by simply joining the messages together in the order of receive. The LoRaWAN port encodes\nidentifies a LoRaWAN fragment of the original wireless M-Bus telegram. This way partial messages can be identified using\nthe LoRaWAN Port:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"10 < LoRaWAN Port < 100 \u2261 (Part Number | Total Parts)"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Gaps in the LoRaWAN Frame Counter are giving a hint for missing telegram parts which can happen in LoRaWAN since it's a\nALOHA based protocol, e.g. collisions and some packet losses are accepted by principle of operation. In case the backend\nnoticed a missing packet the wMBUS telegram can't be assembled anymore as described before."}),"\n",(0,a.jsx)(t.h4,{id:"examples",children:"Examples"}),"\n",(0,a.jsxs)(t.p,{children:["With a configuration of ",(0,a.jsx)(t.code,{children:"loraMaxMsgSize"})," = 50:"]}),"\n",(0,a.jsx)(t.h5,{id:"length-48-byte-wmbus-telegram",children:"Length 48 Byte wMBUS telegram"}),"\n",(0,a.jsx)(t.p,{children:"Will be send on LoRaWAN port 11. Port 11 says it is the first message of only one message (no splitting)."}),"\n",(0,a.jsx)(t.h5,{id:"length-75-byte-wmbus-telegram",children:"Length 75 byte wMBUS telegram"}),"\n",(0,a.jsx)(t.p,{children:"Will be send in two messages on LoRaWAN ports 12 and 22. Port 12 means this part one of a wMBUS telegram that got\nsplitted into two LoRaWAN messages. Port 22 means that this data is the 2nd part of the original wMBUS data. Both parts\nhave to been concatenated in the order of receive by the backend."}),"\n",(0,a.jsx)(t.h5,{id:"length-101-byte-wmbus-telegram",children:"Length 101 byte wMBUS telegram"}),"\n",(0,a.jsx)(t.p,{children:"Will be send in three messages on LoRaWAN ports 13, 23 and 33. Port 13 means this part one of a wMBUS telegram that got\nsplitted into three LoRaWAN messages. Port 23 means that this data is the 2nd part of the original wMBUS data. Port 33\nmeans that this data is the 3rd part of the original wMBUS data. All three parts have to been concatenated in the order\nof receive by the backend."}),"\n",(0,a.jsx)(t.h3,{id:"data-packet-payloadformat-1",children:"Data Packet (PayloadFormat 1)"}),"\n",(0,a.jsxs)(t.p,{children:["When using Payload Format 1, collected telegrams are uploaded on single port 101 ",(0,a.jsx)(t.strong,{children:"without RSSI"})," (of received wmbus\ntelegram) information. For each telegram there will be\nadded the timestamp of reception. The first byte of messages on Port 101 encodes splitting of messages as follows."]}),"\n",(0,a.jsxs)(t.p,{children:["Every Uplink on Port 101 is prefixed with a single byte, where the least significant Bit indicates if that Uplink is the\nfirst part of a message, and the second least significant Bit indicates if that Uplink is the last part or a message. So\nthere are 4 different possible values for the ",(0,a.jsx)(t.strong,{children:"first Byte"})," of an Uplink on Port 101:"]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["0x03:","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"This Uplink is both first and final part of a message. So the remaining Bytes in this Uplink contain the whole\nmessage."}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["0x02:","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"This Uplink is the last but not the first part of a message. There has been at least one Uplink before this one,\nthat contained data that needs to be prepended to the current Uplink in order to get the full Message"}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["0x01:","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"This Uplink is the first but not the last part of a message. There follows at least one Uplink that contains more\ndata to be appended to the current's data in order to get the full message."}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["0x00:","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"This Uplink is neither first nor last part of a message. There has been at least one Uplink before this one that\ncontains more data of the current Message, and there follows at least one more Uplink with data for this Message."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"So each message sent on Port 101, whether it is contained in a single Uplink or spread over multiple ones, starts with\nan Uplink where the least significant Bit of the first Byte is set. Each Message ends with an Uplink where the second\nleast significant Bit of the first Byte is set. In cases where the Message fits in a single Uplink, that Uplink is both\nfirst and last Uplink, and therefore both Bits are set."}),"\n",(0,a.jsx)(t.p,{children:"The combination of those two Bits and the Frame Counter of the Uplinks makes it possible to upload Messages of any\nlength while allowing the receiving side to know exactly if a Message has been transferred completely, or if part of it\nis missing (when there are Frame Counter values missing)."}),"\n",(0,a.jsx)(t.p,{children:"The Bridge puts as many Bytes in each Uplink as possible for the current Spreading Factor, even if the Spreading Factor\nchanges between Uplinks because of ADR."}),"\n",(0,a.jsx)(t.p,{children:"When the data of all Uplinks that are part of a single Message are appended in order of reception (after removing the\nfirst Byte of each Uplink), you get the payload Data of a full message."}),"\n",(0,a.jsx)(t.p,{children:"The Payload Data after reassembly of the split parts consists of a 5 Byte Timestamp, that marks the point in time the\nBridge did receive that telegram, followed by the Data of the Telegram. The Timestamp follows the convention of all our\n40bit-Timestamps; you can find the details under Timestamp in our LoRaWAN Background Information."}),"\n",(0,a.jsx)(t.h3,{id:"data-packet-payloadformat-2",children:"Data Packet (PayloadFormat 2)"}),"\n",(0,a.jsx)(t.p,{children:"Upload Format 2 works like Upload Format 1, with the same logic for splitting messages, but uploads are sent on port"}),"\n",(0,a.jsxs)(t.ol,{start:"102",children:["\n",(0,a.jsx)(t.li,{children:"The Payload consists of a 5 Byte Timestamp marking the time of reception, followed by a uint_8 that holds the (\nnegated) RSSI value for that reception, followed by the data of the Telegram."}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"examples-1",children:"Examples"}),"\n",(0,a.jsxs)(t.p,{children:["For easier understanding, the wMBus-Telegram in the examples will always be ",(0,a.jsx)(t.code,{children:"0102030405060708090a0b0c0d0e0f"})," (15 Byte)."]}),"\n",(0,a.jsx)(t.h4,{id:"payloadformat-1",children:"PayloadFormat 1"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-graphql",metastring:'title="A message sent in a single Uplink"',children:"# An Uplink of 21 Bytes on Port 101:\n'03005e53f31a0102030405060708090a0b0c0d0e0f'\n# Analised:\n'03' -> First and Last Uplink of Message -> complete Message in this Uplink\n'005e53f31a' -> Unix Timestamp 1582560026 -> 2020-02-24T16:00:26 UTC\n'0102030405060708090a0b0c0d0e0f' -> wMBus Telegram\n"})}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-graphql",metastring:'title="A message split over two Uplinks"',children:"# An Uplink of 11 Bytes on Port 101, Frame Counter 341:\n'01005e53f31a0102030405'\n'01' -> First Uplink of Message, more Uplinks follow\n'05e53f31a0102030405' -> First Part of Message Data.\n# Another Uplink of 11 Bytes on Port 101, Frame Counter 342:\n'02060708090a0b0c0d0e0f'\n'02' -> Last (but not first) Uplink of Message.\n'060708090a0b0c0d0e0f' -> Second and final Part of Message Data.\n# We Received a 'first' Part with Frame Counter 341 and a 'last'\n# Part with Frame Counter 342, so we know we did not miss any\n# Parts in between. We can now assembly the complete payload:\n'05e53f31a0102030405060708090a0b0c0d0e0f'\n# Payload anaylsed:\n'005e53f31a' -> Unix Timestamp 1582560026 -> 2020-02-24T16:00:26 UTC\n'0102030405060708090a0b0c0d0e0f' -> wMBus Telegram\n"})}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-graphql",metastring:'title="A message split over three Uplinks"',children:"# An Uplink of 8 Bytes on Port 101, Frame Counter 519:\n'01005e53f31a0102'\n'01' -> First Uplink of Message, more Uplinks follow\n'05e53f31a0102' -> First Part of Message Data.\n# Another Uplink of 8 Bytes on Port 101, Frame Counter 520:\n'0003040506070809'\n'00' -> Middle Part of Message, there have been some Parts already, more Uplinks follow\n'03040506070809' -> Second Part of Message Data.\n# Another Uplink of 7 Bytes on Port 101, Frame Counter 521:\n'020a0b0c0d0e0f'\n'02' -> Last (but not first) Uplink of Message.\n'0a0b0c0d0e0f' -> Third and final Part of Message Data.\n# Frame Counters are consecuetive, so the complete Message is:\n'05e53f31a0102030405060708090a0b0c0d0e0f'\n"})}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-graphql",metastring:'title="Uplinks with a missing a Part""',children:"# An Uplink of 8 Bytes on Port 101, Frame Counter 123:\n'01005e53f31a0102'\n'01' -> First Uplink of Message, more Uplinks follow\n'05e53f31a0102' -> First Part of Message Data.\n# Another Uplink of 7 Bytes on Port 101, Frame Counter 125:\n'020a0b0c0d0e0f'\n'02' -> Last (but not first) Uplink of Message.\n'0a0b0c0d0e0f' -> Third and final Part of Message Data.\n# Frame Counter indicates, that a Part in the middle is missing,\n# so we have to drop the Message.\n"})}),"\n",(0,a.jsx)(t.h4,{id:"payloadformat-2",children:"PayloadFormat 2"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-graphql",metastring:'title="A message sent in a single Uplink"',children:"# An Uplink of 8 Bytes on Port 101, Frame Counter 123:\n'01005e53f31a0102'\n'01' -> First Uplink of Message, more Uplinks follow\n'05e53f31a0102' -> First Part of Message Data.\n# Another Uplink of 7 Bytes on Port 101, Frame Counter 125:\n'020a0b0c0d0e0f'\n'02' -> Last (but not first) Uplink of Message.\n'0a0b0c0d0e0f' -> Third and final Part of Message Data.\n# Frame Counter indicates, that a Part in the middle is missing,\n# so we have to drop the Message.\n"})}),"\n",(0,a.jsx)(t.h2,{id:"upload-speed--duration",children:"Upload Speed / Duration"}),"\n",(0,a.jsx)(t.p,{children:"The firmware has to work in compliance with the European SRD 868 1% duty-cycle regulations. This implies as a rule of\nthumb the device can upload at most wireless M-BUS telegrams via LoRaWAN for 36 seconds every hour."}),"\n",(0,a.jsx)(t.p,{children:"The actual transmit time ('ToA: time on air') for each LoRaWAN message depends on the byte size and the used LoRa\nspreading factor (SF) which defines how redundant LoRa data is send. This means a device with good connectivity and\nconsequently using LoRa SF7 (ToA \u2264 0,050s) can upload much faster more data than a node using LoRa SF11 (ToA \u2265 1s) due\nto a hard to reach LoRaWAN gateway. The bridge will upload in conformity with the regulations automatically as fast as\npossible. When it has to wait it enters a low power sleep mode until the next transmission is possible again. The next\ndata collection phase will be started only after completion of the previous upload phase in respect to the configured\nlistenCron parameter. Because of this it is advisable to define the cron parameter with an estimation of the upload\nduration in mind. This will avoid unexpected 'skipping' of data collection phases."}),"\n",(0,a.jsx)(t.h2,{id:"downlink-payload-formats",children:"Downlink Payload Formats"}),"\n",(0,a.jsx)(t.h3,{id:"lorawan-downlink-ports",children:"LoRaWAN Downlink Ports"}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Port"}),(0,a.jsx)(t.th,{children:"Message"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"128"}),(0,a.jsx)(t.td,{children:"Remote Confiuration"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"132"}),(0,a.jsx)(t.td,{children:"Firmware Control Commands"})]})]})]}),"\n",(0,a.jsx)(t.h3,{id:"remote-configuration",children:"Remote Configuration"}),"\n",(0,a.jsxs)(t.p,{children:["The remote configuration follows the general ",(0,a.jsx)(t.a,{href:"/iot/configuration/lorawan-downlink-config",children:"Lobaro protocol"})," for over the\nair configuration using LoRaWAN."]}),"\n",(0,a.jsx)(t.admonition,{title:"in depth description",type:"tip",children:(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.a,{href:"/iot/configuration/lorawan-downlink-config",children:"Read more"})," about LoRaWAN based downlink configuration."]})}),"\n",(0,a.jsx)(t.h3,{id:"firmware-control-commands",children:"Firmware Control Commands"}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Port"}),(0,a.jsx)(t.th,{children:"Action"}),(0,a.jsx)(t.th,{children:"DL Payload (ASCII)"}),(0,a.jsx)(t.th,{children:"DL Payload (Hex)"}),(0,a.jsx)(t.th,{children:"DL Payload (Base64)"})]})}),(0,a.jsx)(t.tbody,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"132"}),(0,a.jsx)(t.td,{children:"Ad-hoc-readout"}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"read"})}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"72656164"})}),(0,a.jsxs)(t.td,{children:[(0,a.jsx)(t.code,{children:"cmVhZA"}),"=="]})]})})]}),"\n",(0,a.jsx)(t.h4,{id:"ad-hoc-readout",children:"Ad-hoc-readout"}),"\n",(0,a.jsx)(t.p,{children:"A downlink that triggers an Ad hoc readout, independent of CRON triggers. The Ad-hoc readout is using the same\nparameters (filters and listening duration) as a CRON triggered readout."}),"\n",(0,a.jsx)(t.h2,{id:"decodewmbus",children:"Decoding wMBUS telegrams"}),"\n",(0,a.jsx)(t.p,{children:"After receiving and reassemble the raw wireless M-Bus telegrams from your LoRaWAN network provider the actual metering data has to be\ndecrypted and decoded by a backend service for further processing. The details of this are described in the EN 13757\nnorm and the newer OMS specification, which is a clarification of the original underlying norm."}),"\n",(0,a.jsx)(t.p,{children:"A universal wireless M-Bus decoder is a relatively complicated piece of software if you start implementing it from\nscratch since the norm covers many different use cases, units, meter types and data formats. If you know in advance the\nexact telegram format of the deployed meters in your setup a hard coded data decoding may be a feasible approach. This\nis because wireless M-Bus devices often send the same telegram format in every transmission. Please contact the\nmanufacturer of your meters for the needed telegram format details."}),"\n",(0,a.jsxs)(t.admonition,{title:"Lobaro wireless M-BUS parser",type:"tip",children:[(0,a.jsxs)(t.p,{children:["An an alternative to support a quick evaluation of our hardware Lobaro offers a easy to use\nwebservice (",(0,a.jsx)(t.a,{href:"https://www.mbus.org",children:"mbus.org"}),") which is designed\nto decode all sorts of wMBUS input data including decryption if the correct key has been provided. You can access the\ndecoder service for free during testing. The API can be licensed for production usages."]}),(0,a.jsx)(t.p,{children:"Since wireless MBUS is a complex and grown specification some meters may fail to decode correctly. We try to fix any\ndecoding issues as quickly as possible if you report us problems with your specific wMBUS device."})]}),"\n",(0,a.jsx)(t.h2,{id:"example-js-parser",children:"Example JS parser"}),"\n",(0,a.jsxs)(t.p,{children:["This parser may be used to decode the status message of this firmware send over LoRaWAN. For decoding wireless M-BUS telegram data see\nthe above ",(0,a.jsx)(t.a,{href:"#decodewmbus",children:"documentation"})," about this topic."]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-tsx",metastring:'title="Status message LoRaWAN parser (Java-Script)"',children:'function readVersion(bytes, i) {\n if (bytes.length < 3) {\n return null;\n }\n return "v" + bytes[i] + "." + bytes[i + 1] + "." + bytes[i + 2];\n}\n\nfunction parse_sint16(bytes, idx) {\n bytes = bytes.slice(idx || 0);\n var t = bytes[0] << 8 | bytes[1] << 0;\n if ((t & 1 << 15) > 0) { // temp is negative (16bit 2\'s complement)\n t = ((~t) & 0xffff) + 1; // invert 16bits & add 1 => now positive value\n t = t * -1;\n }\n return t;\n}\n\nfunction Decoder(bytes, port) {\n // Decode an uplink message from a buffer\n // (array) of bytes to an object of fields.\n var decoded = {};\n\n if (port === 9) {\n decoded.devStatus = bytes[0];\n decoded.devID = bytes[1] | bytes[2] << 8 | bytes[3] << 16 | bytes[4] << 24;\n decoded.dif = bytes[5];\n decoded.vif = bytes[6];\n decoded.data0 = bytes[7];\n decoded.data1 = bytes[8];\n decoded.data2 = bytes[9];\n }\n\n // example decoder for status packet by lobaro\n if (port === 1 && bytes.length == 9) { // status packet - old\n decoded.FirmwareVersion = String.fromCharCode.apply(null, bytes.slice(0, 5)); // byte 0-4\n decoded.Vbat = (bytes[5] | bytes[6] << 8) / 1000.0; // byte 6-7 (originally in mV)\n decoded.Temp = parse_sint16(bytes, 7) / 10.0; // byte 8-9 (originally in 10th degree C)\n decoded.msg = "Firmware Version: v" + decoded.FirmwareVersion + " Battery: " + decoded.Vbat + "V Temperature: " + decoded.Temp + "\xb0C";\n } else if (port === 1 && bytes.length >= 7) {\n decoded.FirmwareVersion = readVersion(bytes, 0); // byte 0-2\n decoded.Vbat = (bytes[3] | bytes[4] << 8) / 1000.0; // originally in mV\n decoded.Temp = parse_sint16(bytes, 5) / 10.0; // byte 8-9 (originally in 10th degree C)\n decoded.msg = "Firmware Version: " + decoded.FirmwareVersion + " Battery: " + decoded.Vbat + "V Temperature: " + decoded.Temp + "\xb0C";\n if (bytes.length == 8) { // added in v2.5.0\n decoded.Flags = bytes[7];\n }\n }\n\n\n return decoded;\n}\n\n// Wrapper for Lobaro Platform\nfunction Parse(input) {\n // Decode an incoming message to an object of fields.\n var b = bytes(atob(input.data));\n var decoded = Decoder(b, input.fPort);\n\n return decoded;\n}\n\n// Wrapper for Loraserver / ChirpStack\nfunction Decode(fPort, bytes) {\n return Decoder(bytes, fPort);\n}\n\n// Wrapper for Digimondo niota.io\n// Uncomment only when used in niota!\n/*\nmodule.exports = function (payload, meta) {\n const port = meta.lora.fport;\n const buf = Buffer.from(payload, \'hex\');\n \n return Decoder(buf, port);\n}*/\n'})})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>r});var a=n(6540);const s={},i=a.createContext(s);function o(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6bb8bb71.74bfc446.js b/assets/js/6bb8bb71.74bfc446.js new file mode 100644 index 00000000..6e2c39c8 --- /dev/null +++ b/assets/js/6bb8bb71.74bfc446.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[437],{7155:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var t=s(4848),r=s(8453);const i={sidebar_position:1},a="Description",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Discontinued Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/"},next:{title:"Gateway V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/"}},d={},c=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(n.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(n.p,{children:["Get started by ",(0,t.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Or ",(0,t.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>o});var t=s(6540);const r={},i=t.createContext(r);function a(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6bb8bb71.fd3af663.js b/assets/js/6bb8bb71.fd3af663.js deleted file mode 100644 index e8e1a334..00000000 --- a/assets/js/6bb8bb71.fd3af663.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[437],{7155:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var t=s(4848),r=s(8453);const i={sidebar_position:1},a="Description",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Discontinued Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/"},next:{title:"Gateway V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/"}},d={},c=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(n.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(n.p,{children:["Get started by ",(0,t.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Or ",(0,t.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>o});var t=s(6540);const r={},i=t.createContext(r);function a(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7123406b.f2ee0fc0.js b/assets/js/7123406b.f2ee0fc0.js deleted file mode 100644 index aa53f0d8..00000000 --- a/assets/js/7123406b.f2ee0fc0.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3682],{9208:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png 1600w,"+t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png 1802w",images:[{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",width:1600,height:1323},{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png",width:1802,height:1490}],src:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",toString:function(){return t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png"},placeholder:void 0,width:1600,height:1323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVR4nAFIAbf+ALi4sn+zq6H/sKCU+7esn//At6X/wLSg/7qtmP6onYv/k4Z3+Ma4oiQAzczKnJ6wov9XgGj8g5J4/4OOfP9PY0r/UV9J/mlzY/+QjX3/sZ6MRQDTzMWxj7Ce/wdyQvxdkHr/bYyC/zRWO/8VPin/Rm9t/ZGXkf+xoIhWAMzS2bKmwrr/BWEw/EdyZf9EVzv/c3ZY/2qCiv9denj9kaaw/6SkpHMA0cfDs5W1mP9TiGj8d3Jv/2dpWP9SYk7/JlRC/0RjV/yRnqH/qKyysADPxLezl6qL/3mPjPqim5r9srm1/am+uv0iYU39SE9J+oaJg/+jqrJnAOHg27aGk3r/eIuJ/Jqksv+WrLv/mcXV/yFjT/80RkT8naSi/7/ExGkA3NjShayuos2ChoXBcXF4w2xwesNfc3vCVmthwm50aMCho6DMwMDAThY6x3U9c17CAAAAAElFTkSuQmCC"}},7892:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/Lobaro-Solar-Gateway-wireless-Mbus.fbc4cc5.1051.jpg 1051w",images:[{path:t.p+"assets/images/ideal-img/Lobaro-Solar-Gateway-wireless-Mbus.fbc4cc5.1051.jpg",width:1051,height:754}],src:t.p+"assets/images/ideal-img/Lobaro-Solar-Gateway-wireless-Mbus.fbc4cc5.1051.jpg",toString:function(){return t.p+"assets/images/ideal-img/Lobaro-Solar-Gateway-wireless-Mbus.fbc4cc5.1051.jpg"},placeholder:void 0,width:1051,height:754},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAHAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAYH/8QAHxAAAgICAgMBAAAAAAAAAAAAAQIDBAARBQcSIVGh/8QAFAEBAAAAAAAAAAAAAAAAAAAAAf/EABURAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIRAxEAPwCo4mr2za7Xv15+VgtcJRnCSGdkjiaFtMpVEHkJPHXv6DvYObusVtVANlGIGtmL2f3GMaI//9k="}},9716:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png 300w",images:[{path:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",width:300,height:141}],src:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",toString:function(){return t.p+"assets/images/ideal-img/labelv3.0e38395.300.png"},placeholder:void 0,width:300,height:141},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsUlEQVR4nB3MTQqCQABAYQ8fdIWgCGsXQd2gbYsgNUrzDytnJHWySY0Kghe2fPD4jM+n5Pm8Udc5batompL7PeP7bZnPp0zMAavVEkOpjMtFkCQJUmYIIUlTgdYPhsMRvV6fxWKGcT4HRFFIEBzxPBfHsSiKTm8Yj0eYpollrbsxRmYFm82Ww+GI70fE8Qmta2x7h+t2kIfx0CFVlZDnPmURolRMmu7//X5dqaoTUlj8AJXlsPmMwg3sAAAAAElFTkSuQmCC"}},2013:(e,n,t)=>{"use strict";t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=t(4848),s=t(8453);const o={sidebar_position:5,displayed_sidebar:"productsSidebar",title:"wM-Bus GW (Solar)"},r="Wireless M-Bus Gateway (Solar)",a={id:"products/metering-gateways/wireless-mbus-gateway-sun-v1",title:"wM-Bus GW (Solar)",description:"Wireless M-Bus Gateway (Solar){"use strict";t.d(n,{R:()=>r,x:()=>a});var i=t(6540);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7123406b.f3aa866c.js b/assets/js/7123406b.f3aa866c.js new file mode 100644 index 00000000..845480d2 --- /dev/null +++ b/assets/js/7123406b.f3aa866c.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3682],{9208:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png 1600w,"+t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png 1802w",images:[{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",width:1600,height:1323},{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png",width:1802,height:1490}],src:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",toString:function(){return t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png"},placeholder:void 0,width:1600,height:1323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVR4nAFIAbf+ALi4sn+zq6H/sKCU+7esn//At6X/wLSg/7qtmP6onYv/k4Z3+Ma4oiQAzczKnJ6wov9XgGj8g5J4/4OOfP9PY0r/UV9J/mlzY/+QjX3/sZ6MRQDTzMWxj7Ce/wdyQvxdkHr/bYyC/zRWO/8VPin/Rm9t/ZGXkf+xoIhWAMzS2bKmwrr/BWEw/EdyZf9EVzv/c3ZY/2qCiv9denj9kaaw/6SkpHMA0cfDs5W1mP9TiGj8d3Jv/2dpWP9SYk7/JlRC/0RjV/yRnqH/qKyysADPxLezl6qL/3mPjPqim5r9srm1/am+uv0iYU39SE9J+oaJg/+jqrJnAOHg27aGk3r/eIuJ/Jqksv+WrLv/mcXV/yFjT/80RkT8naSi/7/ExGkA3NjShayuos2ChoXBcXF4w2xwesNfc3vCVmthwm50aMCho6DMwMDAThY6x3U9c17CAAAAAElFTkSuQmCC"}},7892:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/Lobaro-Solar-Gateway-wireless-Mbus.fbc4cc5.1051.jpg 1051w",images:[{path:t.p+"assets/images/ideal-img/Lobaro-Solar-Gateway-wireless-Mbus.fbc4cc5.1051.jpg",width:1051,height:754}],src:t.p+"assets/images/ideal-img/Lobaro-Solar-Gateway-wireless-Mbus.fbc4cc5.1051.jpg",toString:function(){return t.p+"assets/images/ideal-img/Lobaro-Solar-Gateway-wireless-Mbus.fbc4cc5.1051.jpg"},placeholder:void 0,width:1051,height:754},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAHAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAYH/8QAHxAAAgICAgMBAAAAAAAAAAAAAQIDBAARBQcSIVGh/8QAFAEBAAAAAAAAAAAAAAAAAAAAAf/EABURAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIRAxEAPwCo4mr2za7Xv15+VgtcJRnCSGdkjiaFtMpVEHkJPHXv6DvYObusVtVANlGIGtmL2f3GMaI//9k="}},9716:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png 300w",images:[{path:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",width:300,height:141}],src:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",toString:function(){return t.p+"assets/images/ideal-img/labelv3.0e38395.300.png"},placeholder:void 0,width:300,height:141},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsUlEQVR4nB3MTQqCQABAYQ8fdIWgCGsXQd2gbYsgNUrzDytnJHWySY0Kghe2fPD4jM+n5Pm8Udc5batompL7PeP7bZnPp0zMAavVEkOpjMtFkCQJUmYIIUlTgdYPhsMRvV6fxWKGcT4HRFFIEBzxPBfHsSiKTm8Yj0eYpollrbsxRmYFm82Ww+GI70fE8Qmta2x7h+t2kIfx0CFVlZDnPmURolRMmu7//X5dqaoTUlj8AJXlsPmMwg3sAAAAAElFTkSuQmCC"}},2013:(e,n,t)=>{"use strict";t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=t(4848),s=t(8453);const o={sidebar_position:5,title:"wM-Bus GW (Solar)"},r="Wireless M-Bus Gateway (Solar)",a={id:"products/metering-gateways/wireless-mbus-gateway-sun-v1",title:"wM-Bus GW (Solar)",description:"Wireless M-Bus Gateway (Solar){"use strict";t.d(n,{R:()=>r,x:()=>a});var i=t(6540);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/754583dd.365cbf4d.js b/assets/js/754583dd.365cbf4d.js new file mode 100644 index 00000000..e6e41862 --- /dev/null +++ b/assets/js/754583dd.365cbf4d.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5633],{3249:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/images/ideal-img/MBusWirelessLogo.84bd227.1600.png 1600w,"+s.p+"assets/images/ideal-img/MBusWirelessLogo.199a9c4.2432.png 2432w,"+s.p+"assets/images/ideal-img/MBusWirelessLogo.4bbefe2.3129.png 3129w",images:[{path:s.p+"assets/images/ideal-img/MBusWirelessLogo.84bd227.1600.png",width:1600,height:576},{path:s.p+"assets/images/ideal-img/MBusWirelessLogo.199a9c4.2432.png",width:2432,height:875},{path:s.p+"assets/images/ideal-img/MBusWirelessLogo.4bbefe2.3129.png",width:3129,height:1126}],src:s.p+"assets/images/ideal-img/MBusWirelessLogo.84bd227.1600.png",toString:function(){return s.p+"assets/images/ideal-img/MBusWirelessLogo.84bd227.1600.png"},placeholder:void 0,width:1600,height:576},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAC4yAAAuMgHj9s1YAAAAoUlEQVR4nB2NMQuCQBhAP6hoS7/v3Fscirw7T2luKFqDQHBqCISGHMOWkPI+z4j2+rdhb3rL44GIeIaSC4pdJiSvRXxfkm620BOWY1jVw79j+paoXUW6PaPpcjSvE8Xu04ek2hsqziH9joAie/Rju0PV5aR4T4pLofiK2l6EtJWv7AE1F+BJhwDZoF9QWE9o8ZgH0iaeciaQz8Q3zZSk2/wAUDwnFra0cygAAAAASUVORK5CYII="}},7173:(e,t,s)=>{"use strict";s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>n,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var i=s(4848),r=s(8453);const o={sidebar_position:0,title:"Overview"},n="Lobaro IoT Products",a={id:"products/index",title:"Overview",description:"---",source:"@site/docs/products/index.md",sourceDirName:"products",slug:"/products/",permalink:"/iot/products/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,title:"Overview"},sidebar:"allDocSidebar",previous:{title:"Overview",permalink:"/iot/"},next:{title:"wM-Bus GW V3 (Battery)",permalink:"/iot/products/metering-gateways/wireless-mbus-gateway-v3"}},d={},l=[{value:"Metering Gateways",id:"metering-gateways",level:2},{value:"Wireless M-BUS Gateways",id:"wireless-m-bus-gateways",level:3}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components},{Image:o}=t;return o||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"lobaro-iot-products",children:"Lobaro IoT Products"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"metering-gateways",children:"Metering Gateways"}),"\n",(0,i.jsx)(t.h3,{id:"wireless-m-bus-gateways",children:"Wireless M-BUS Gateways"}),"\n",(0,i.jsx)(o,{alt:"Wireless M-BUS Logo",img:s(3249),style:{width:"15%",paddingTop:"0px",paddingBottom:"10px"}}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Name"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Lobaro PN"}),(0,i.jsx)(t.th,{children:"Firmware"}),(0,i.jsx)(t.th,{children:"Power Supply"}),(0,i.jsx)(t.th,{children:"Antenna"}),(0,i.jsx)(t.th,{children:"Notes"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.a,{href:"/iot/products/metering-gateways/wireless-mbus-gateway-v3",children:"Wireless M-BUS Gateway V3"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"8000162"})}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"/iot/components/firmware/app-nrf9160-wmbus/introduction",children:"app-nrf9160-wmbus"})}),(0,i.jsx)(t.td,{children:"1x D-Cell 3.6V"}),(0,i.jsx)(t.td,{children:"Internal PCB"}),(0,i.jsx)(t.td,{})]})})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,t,s)=>{"use strict";s.d(t,{R:()=>n,x:()=>a});var i=s(6540);const r={},o=i.createContext(r);function n(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/754583dd.6d00d2cc.js b/assets/js/754583dd.6d00d2cc.js deleted file mode 100644 index 58f70329..00000000 --- a/assets/js/754583dd.6d00d2cc.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5633],{3249:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/images/ideal-img/MBusWirelessLogo.84bd227.1600.png 1600w,"+s.p+"assets/images/ideal-img/MBusWirelessLogo.199a9c4.2432.png 2432w,"+s.p+"assets/images/ideal-img/MBusWirelessLogo.4bbefe2.3129.png 3129w",images:[{path:s.p+"assets/images/ideal-img/MBusWirelessLogo.84bd227.1600.png",width:1600,height:576},{path:s.p+"assets/images/ideal-img/MBusWirelessLogo.199a9c4.2432.png",width:2432,height:875},{path:s.p+"assets/images/ideal-img/MBusWirelessLogo.4bbefe2.3129.png",width:3129,height:1126}],src:s.p+"assets/images/ideal-img/MBusWirelessLogo.84bd227.1600.png",toString:function(){return s.p+"assets/images/ideal-img/MBusWirelessLogo.84bd227.1600.png"},placeholder:void 0,width:1600,height:576},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAC4yAAAuMgHj9s1YAAAAoUlEQVR4nB2NMQuCQBhAP6hoS7/v3Fscirw7T2luKFqDQHBqCISGHMOWkPI+z4j2+rdhb3rL44GIeIaSC4pdJiSvRXxfkm620BOWY1jVw79j+paoXUW6PaPpcjSvE8Xu04ek2hsqziH9joAie/Rju0PV5aR4T4pLofiK2l6EtJWv7AE1F+BJhwDZoF9QWE9o8ZgH0iaeciaQz8Q3zZSk2/wAUDwnFra0cygAAAAASUVORK5CYII="}},7173:(e,t,s)=>{"use strict";s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>n,toc:()=>l});var i=s(4848),r=s(8453);const o={sidebar_position:0,displayed_sidebar:"productsSidebar",title:"Overview"},a="Lobaro IoT Products",n={id:"products/index",title:"Overview",description:"---",source:"@site/docs/products/index.md",sourceDirName:"products",slug:"/products/",permalink:"/iot/products/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,displayed_sidebar:"productsSidebar",title:"Overview"},sidebar:"productsSidebar",next:{title:"wM-Bus GW V3 (Battery)",permalink:"/iot/products/metering-gateways/wireless-mbus-gateway-v3"}},d={},l=[{value:"Metering Gateways",id:"metering-gateways",level:2},{value:"Wireless M-BUS Gateways",id:"wireless-m-bus-gateways",level:3}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components},{Image:o}=t;return o||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"lobaro-iot-products",children:"Lobaro IoT Products"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"metering-gateways",children:"Metering Gateways"}),"\n",(0,i.jsx)(t.h3,{id:"wireless-m-bus-gateways",children:"Wireless M-BUS Gateways"}),"\n",(0,i.jsx)(o,{alt:"Wireless M-BUS Logo",img:s(3249),style:{width:"15%",paddingTop:"0px",paddingBottom:"10px"}}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Name"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Lobaro PN"}),(0,i.jsx)(t.th,{children:"Firmware"}),(0,i.jsx)(t.th,{children:"Power Supply"}),(0,i.jsx)(t.th,{children:"Antenna"}),(0,i.jsx)(t.th,{children:"Notes"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.a,{href:"/iot/products/metering-gateways/wireless-mbus-gateway-v3",children:"Wireless M-BUS Gateway V3"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"8000162"})}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"/iot/components/firmware/app-nrf9160-wmbus/introduction",children:"app-nrf9160-wmbus"})}),(0,i.jsx)(t.td,{children:"1x D-Cell 3.6V"}),(0,i.jsx)(t.td,{children:"Internal PCB"}),(0,i.jsx)(t.td,{})]})})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,t,s)=>{"use strict";s.d(t,{R:()=>a,x:()=>n});var i=s(6540);const r={},o=i.createContext(r);function a(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function n(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7adc43c9.1c07febc.js b/assets/js/7adc43c9.1c07febc.js deleted file mode 100644 index 3b5cf9b3..00000000 --- a/assets/js/7adc43c9.1c07febc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1259],{9799:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var n=t(4848),i=t(8453);const s={},o="Server Certificates",a={id:"platform/administration/server-certificates",title:"Server Certificates",description:"The server needs certificates for different use cases.",source:"@site/docs/platform/administration/server-certificates.md",sourceDirName:"platform/administration",slug:"/platform/administration/server-certificates",permalink:"/iot/platform/administration/server-certificates",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/server-certificates.md",tags:[],version:"current",frontMatter:{},sidebar:"cloudSidebar",previous:{title:"Monitoring",permalink:"/iot/platform/administration/monitoring"},next:{title:"Server Configuration",permalink:"/iot/platform/administration/server-configuration"}},c={},l=[{value:"HTTPS (Frontend)",id:"https-frontend",level:2},{value:"CoAPs (Devices)",id:"coaps-devices",level:2},{value:"Create a Certificate Signing Request (CSR)",id:"create-a-certificate-signing-request-csr",level:3},{value:"Create Private Key",id:"create-private-key",level:4},{value:"Create CSR",id:"create-csr",level:4},{value:"Request Certificate from Lobaro",id:"request-certificate-from-lobaro",level:3},{value:"Install the signed Certificate in the Platform",id:"install-the-signed-certificate-in-the-platform",level:3}];function d(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h1,{id:"server-certificates",children:"Server Certificates"}),"\n",(0,n.jsx)(r.p,{children:"The server needs certificates for different use cases."}),"\n",(0,n.jsx)(r.h2,{id:"https-frontend",children:"HTTPS (Frontend)"}),"\n",(0,n.jsx)(r.p,{children:"The frontend is always serves via HTTP. To setup HTTPS connections to the Platform Frontend you will need a reverse proxy like Nginx or Apache."}),"\n",(0,n.jsxs)(r.p,{children:["By default we setup an nginx using docker together with the ",(0,n.jsx)(r.a,{href:"https://github.com/jwilder/docker-letsencrypt-nginx-proxy-companion",children:"let's encrypt companion"})," to provide HTTPS."]}),"\n",(0,n.jsx)(r.h2,{id:"coaps-devices",children:"CoAPs (Devices)"}),"\n",(0,n.jsx)(r.p,{children:"Devices can used secure CoAPs connections to the backend. To use CoAPs a Certificate signed by Lobaro is required."}),"\n",(0,n.jsx)(r.p,{children:"The setup consists of the following steps:"}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsx)(r.li,{children:"Create a Certificate Signing Request (CSR)"}),"\n",(0,n.jsx)(r.li,{children:"Request a Certificate from Lobaro"}),"\n",(0,n.jsx)(r.li,{children:"Install the signed Certificate in the Platform"}),"\n"]}),"\n",(0,n.jsx)(r.h3,{id:"create-a-certificate-signing-request-csr",children:"Create a Certificate Signing Request (CSR)"}),"\n",(0,n.jsx)(r.h4,{id:"create-private-key",children:"Create Private Key"}),"\n",(0,n.jsx)(r.p,{children:"The key must be created at the Platform server and should never leave the system."}),"\n",(0,n.jsx)(r.p,{children:"openssl ecparam -name prime256v1 -genkey -noout -out platform.key"}),"\n",(0,n.jsx)(r.admonition,{type:"danger",children:(0,n.jsxs)(r.p,{children:["Do not send the resulting private key file ",(0,n.jsx)(r.code,{children:"platform.key"})," to anyone."]})}),"\n",(0,n.jsx)(r.h4,{id:"create-csr",children:"Create CSR"}),"\n",(0,n.jsx)(r.p,{children:'Update "-subj" parameter in the command below according to you server and organisation.'}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["C is Country Name: e.g. ",(0,n.jsx)(r.code,{children:"C=DE"})]}),"\n",(0,n.jsxs)(r.li,{children:["ST is State or Province Name (full name): e.g. ",(0,n.jsx)(r.code,{children:"ST=Hamburg"})]}),"\n",(0,n.jsxs)(r.li,{children:["O is Organization Name (eg, company): e.g. ",(0,n.jsx)(r.code,{children:"O=Lobaro GmbH"})]}),"\n",(0,n.jsxs)(r.li,{children:["CN is Common Name (e.g. server FQDN or YOUR name): e.g. ",(0,n.jsx)(r.code,{children:"CN=up.lobaro.com"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["The CN ",(0,n.jsx)(r.strong,{children:"must"})," match your domain that is configured in the devices. It can also be an IP address."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'openssl req -new -key platform.key -sha256 -subj "/C=DE/ST=Hamburg/O=Lobaro GmbH/CN=up.lobaro.com" -out "platform.csr"\n'})}),"\n",(0,n.jsx)(r.p,{children:"Verify your request with:"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:" openssl req -text -noout -in platform.csr\n"})}),"\n",(0,n.jsx)(r.h3,{id:"request-certificate-from-lobaro",children:"Request Certificate from Lobaro"}),"\n",(0,n.jsxs)(r.p,{children:["Send the generated CSR file (",(0,n.jsx)(r.strong,{children:"platform.csr"}),") to ",(0,n.jsx)(r.a,{href:"mailto:support@lobaro.de",children:"support@lobaro.de"})," to receive a valid certificate for your Server."]}),"\n",(0,n.jsx)(r.h3,{id:"install-the-signed-certificate-in-the-platform",children:"Install the signed Certificate in the Platform"}),"\n",(0,n.jsx)(r.p,{children:"Add or update the following keys in the Platform configuration file:"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:'server:\n dtlsConfig:\n dtlsCertDir: "./config" # This way the configuration directory is used to lookup the key and cert.\n dtlsCertName: "platform" # Used to lookup "platform.crt" and "platform.key"\nfeatureToggle:\n dtlsSecureCoapServiceEnabled: true # removed in > v1.59.1\n'})}),"\n",(0,n.jsxs)(r.admonition,{type:"danger",children:[(0,n.jsxs)(r.p,{children:["We recommend to ",(0,n.jsxs)(r.strong,{children:["not backup the ",(0,n.jsx)(r.code,{children:"platform.key"})]})," file. If it's lost, we can issue new certificates."]}),(0,n.jsx)(r.p,{children:"If you need to backup the key file make sure the backup is encrypted in a secure way."})]}),"\n",(0,n.jsxs)(r.p,{children:["In case you choose another location than ",(0,n.jsx)(r.code,{children:"./config"})," the ",(0,n.jsx)(r.code,{children:"docker-compose.yml"})," must be updated to mount the ",(0,n.jsx)(r.code,{children:"dtlsCertDir"}),":"]}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"services:\n lobaro-backend:\n volumes:\n - :\n"})}),"\n",(0,n.jsx)(r.p,{children:"To apply the Configuration restart the Platfrom:"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:"docker restart platform_lobaro-backend_1\n"})}),"\n",(0,n.jsxs)(r.admonition,{type:"tip",children:[(0,n.jsxs)(r.p,{children:["In case the commands fails with e.g.\n",(0,n.jsx)(r.code,{children:"Error response from daemon: No such container: platform_lobaro-backend_1"})]}),(0,n.jsx)(r.p,{children:"Execute"}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{children:"docker ps | grep lobaro\n"})}),(0,n.jsxs)(r.p,{children:["You should find the container that is running the platform. The restart command can be issued with the ",(0,n.jsx)(r.code,{children:"CONTAINER ID"})," or ",(0,n.jsx)(r.code,{children:"NAME"})]})]})]})}function h(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,r,t)=>{t.d(r,{R:()=>o,x:()=>a});var n=t(6540);const i={},s=n.createContext(i);function o(e){const r=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7adc43c9.951b3ea2.js b/assets/js/7adc43c9.951b3ea2.js new file mode 100644 index 00000000..6530f68d --- /dev/null +++ b/assets/js/7adc43c9.951b3ea2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1259],{9799:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var n=t(4848),i=t(8453);const s={},o="Server Certificates",a={id:"platform/administration/server-certificates",title:"Server Certificates",description:"The server needs certificates for different use cases.",source:"@site/docs/platform/administration/server-certificates.md",sourceDirName:"platform/administration",slug:"/platform/administration/server-certificates",permalink:"/iot/platform/administration/server-certificates",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/server-certificates.md",tags:[],version:"current",frontMatter:{},sidebar:"allDocSidebar",previous:{title:"Monitoring",permalink:"/iot/platform/administration/monitoring"},next:{title:"Server Configuration",permalink:"/iot/platform/administration/server-configuration"}},c={},l=[{value:"HTTPS (Frontend)",id:"https-frontend",level:2},{value:"CoAPs (Devices)",id:"coaps-devices",level:2},{value:"Create a Certificate Signing Request (CSR)",id:"create-a-certificate-signing-request-csr",level:3},{value:"Create Private Key",id:"create-private-key",level:4},{value:"Create CSR",id:"create-csr",level:4},{value:"Request Certificate from Lobaro",id:"request-certificate-from-lobaro",level:3},{value:"Install the signed Certificate in the Platform",id:"install-the-signed-certificate-in-the-platform",level:3}];function d(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h1,{id:"server-certificates",children:"Server Certificates"}),"\n",(0,n.jsx)(r.p,{children:"The server needs certificates for different use cases."}),"\n",(0,n.jsx)(r.h2,{id:"https-frontend",children:"HTTPS (Frontend)"}),"\n",(0,n.jsx)(r.p,{children:"The frontend is always serves via HTTP. To setup HTTPS connections to the Platform Frontend you will need a reverse proxy like Nginx or Apache."}),"\n",(0,n.jsxs)(r.p,{children:["By default we setup an nginx using docker together with the ",(0,n.jsx)(r.a,{href:"https://github.com/jwilder/docker-letsencrypt-nginx-proxy-companion",children:"let's encrypt companion"})," to provide HTTPS."]}),"\n",(0,n.jsx)(r.h2,{id:"coaps-devices",children:"CoAPs (Devices)"}),"\n",(0,n.jsx)(r.p,{children:"Devices can used secure CoAPs connections to the backend. To use CoAPs a Certificate signed by Lobaro is required."}),"\n",(0,n.jsx)(r.p,{children:"The setup consists of the following steps:"}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsx)(r.li,{children:"Create a Certificate Signing Request (CSR)"}),"\n",(0,n.jsx)(r.li,{children:"Request a Certificate from Lobaro"}),"\n",(0,n.jsx)(r.li,{children:"Install the signed Certificate in the Platform"}),"\n"]}),"\n",(0,n.jsx)(r.h3,{id:"create-a-certificate-signing-request-csr",children:"Create a Certificate Signing Request (CSR)"}),"\n",(0,n.jsx)(r.h4,{id:"create-private-key",children:"Create Private Key"}),"\n",(0,n.jsx)(r.p,{children:"The key must be created at the Platform server and should never leave the system."}),"\n",(0,n.jsx)(r.p,{children:"openssl ecparam -name prime256v1 -genkey -noout -out platform.key"}),"\n",(0,n.jsx)(r.admonition,{type:"danger",children:(0,n.jsxs)(r.p,{children:["Do not send the resulting private key file ",(0,n.jsx)(r.code,{children:"platform.key"})," to anyone."]})}),"\n",(0,n.jsx)(r.h4,{id:"create-csr",children:"Create CSR"}),"\n",(0,n.jsx)(r.p,{children:'Update "-subj" parameter in the command below according to you server and organisation.'}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["C is Country Name: e.g. ",(0,n.jsx)(r.code,{children:"C=DE"})]}),"\n",(0,n.jsxs)(r.li,{children:["ST is State or Province Name (full name): e.g. ",(0,n.jsx)(r.code,{children:"ST=Hamburg"})]}),"\n",(0,n.jsxs)(r.li,{children:["O is Organization Name (eg, company): e.g. ",(0,n.jsx)(r.code,{children:"O=Lobaro GmbH"})]}),"\n",(0,n.jsxs)(r.li,{children:["CN is Common Name (e.g. server FQDN or YOUR name): e.g. ",(0,n.jsx)(r.code,{children:"CN=up.lobaro.com"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["The CN ",(0,n.jsx)(r.strong,{children:"must"})," match your domain that is configured in the devices. It can also be an IP address."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'openssl req -new -key platform.key -sha256 -subj "/C=DE/ST=Hamburg/O=Lobaro GmbH/CN=up.lobaro.com" -out "platform.csr"\n'})}),"\n",(0,n.jsx)(r.p,{children:"Verify your request with:"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:" openssl req -text -noout -in platform.csr\n"})}),"\n",(0,n.jsx)(r.h3,{id:"request-certificate-from-lobaro",children:"Request Certificate from Lobaro"}),"\n",(0,n.jsxs)(r.p,{children:["Send the generated CSR file (",(0,n.jsx)(r.strong,{children:"platform.csr"}),") to ",(0,n.jsx)(r.a,{href:"mailto:support@lobaro.de",children:"support@lobaro.de"})," to receive a valid certificate for your Server."]}),"\n",(0,n.jsx)(r.h3,{id:"install-the-signed-certificate-in-the-platform",children:"Install the signed Certificate in the Platform"}),"\n",(0,n.jsx)(r.p,{children:"Add or update the following keys in the Platform configuration file:"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:'server:\n dtlsConfig:\n dtlsCertDir: "./config" # This way the configuration directory is used to lookup the key and cert.\n dtlsCertName: "platform" # Used to lookup "platform.crt" and "platform.key"\nfeatureToggle:\n dtlsSecureCoapServiceEnabled: true # removed in > v1.59.1\n'})}),"\n",(0,n.jsxs)(r.admonition,{type:"danger",children:[(0,n.jsxs)(r.p,{children:["We recommend to ",(0,n.jsxs)(r.strong,{children:["not backup the ",(0,n.jsx)(r.code,{children:"platform.key"})]})," file. If it's lost, we can issue new certificates."]}),(0,n.jsx)(r.p,{children:"If you need to backup the key file make sure the backup is encrypted in a secure way."})]}),"\n",(0,n.jsxs)(r.p,{children:["In case you choose another location than ",(0,n.jsx)(r.code,{children:"./config"})," the ",(0,n.jsx)(r.code,{children:"docker-compose.yml"})," must be updated to mount the ",(0,n.jsx)(r.code,{children:"dtlsCertDir"}),":"]}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"services:\n lobaro-backend:\n volumes:\n - :\n"})}),"\n",(0,n.jsx)(r.p,{children:"To apply the Configuration restart the Platfrom:"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:"docker restart platform_lobaro-backend_1\n"})}),"\n",(0,n.jsxs)(r.admonition,{type:"tip",children:[(0,n.jsxs)(r.p,{children:["In case the commands fails with e.g.\n",(0,n.jsx)(r.code,{children:"Error response from daemon: No such container: platform_lobaro-backend_1"})]}),(0,n.jsx)(r.p,{children:"Execute"}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{children:"docker ps | grep lobaro\n"})}),(0,n.jsxs)(r.p,{children:["You should find the container that is running the platform. The restart command can be issued with the ",(0,n.jsx)(r.code,{children:"CONTAINER ID"})," or ",(0,n.jsx)(r.code,{children:"NAME"})]})]})]})}function h(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,r,t)=>{t.d(r,{R:()=>o,x:()=>a});var n=t(6540);const i={},s=n.createContext(i);function o(e){const r=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/81ca1360.40be56f8.js b/assets/js/81ca1360.40be56f8.js deleted file mode 100644 index beab7cd5..00000000 --- a/assets/js/81ca1360.40be56f8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5948],{687:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=s(4848),r=s(8453);const a={sidebar_position:1},i="Description",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Gateway DinRail",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/"},next:{title:"Gateway Concentrator",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(n.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(n.p,{children:["Get started by ",(0,t.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Or ",(0,t.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>o});var t=s(6540);const r={},a=t.createContext(r);function i(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/81ca1360.58509e95.js b/assets/js/81ca1360.58509e95.js new file mode 100644 index 00000000..83902057 --- /dev/null +++ b/assets/js/81ca1360.58509e95.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5948],{687:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=s(4848),r=s(8453);const a={sidebar_position:1},i="Description",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Gateway DinRail",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/"},next:{title:"Gateway Concentrator",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(n.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(n.p,{children:["Get started by ",(0,t.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Or ",(0,t.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>o});var t=s(6540);const r={},a=t.createContext(r);function i(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/82416a47.07b9ecf9.js b/assets/js/82416a47.07b9ecf9.js new file mode 100644 index 00000000..65b84498 --- /dev/null +++ b/assets/js/82416a47.07b9ecf9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8320],{3966:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var o=t(4848),r=t(8453);const n={sidebar_position:1},a="Workflow",i={id:"products/sensor-gateways/wireless-mbus-g3/manual/workflow",title:"Workflow",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/manual/workflow.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/manual",slug:"/products/sensor-gateways/wireless-mbus-g3/manual/workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/manual/workflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg"},next:{title:"Wmbus Gateway V4",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/"}},u={},l=[];function c(e){const s={h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{id:"workflow",children:"Workflow"}),"\n",(0,o.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var o=t(6540);const r={},n=o.createContext(r);function a(e){const s=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/82416a47.2fc466a5.js b/assets/js/82416a47.2fc466a5.js deleted file mode 100644 index 8b8bf080..00000000 --- a/assets/js/82416a47.2fc466a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8320],{3966:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var o=t(4848),r=t(8453);const n={sidebar_position:1},a="Workflow",i={id:"products/sensor-gateways/wireless-mbus-g3/manual/workflow",title:"Workflow",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/manual/workflow.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/manual",slug:"/products/sensor-gateways/wireless-mbus-g3/manual/workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/manual/workflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg"},next:{title:"Wmbus Gateway V4",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/"}},u={},l=[];function c(e){const s={h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{id:"workflow",children:"Workflow"}),"\n",(0,o.jsx)(s.p,{children:"Einleitung"})]})}function d(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var o=t(6540);const r={},n=o.createContext(r);function a(e){const s=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/93880fc8.b6db6ab0.js b/assets/js/93880fc8.b6db6ab0.js new file mode 100644 index 00000000..d8ec0deb --- /dev/null +++ b/assets/js/93880fc8.b6db6ab0.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1944],{9215:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/MBusWirelessLogo.c0cdf50.271.jpg 271w",images:[{path:i.p+"assets/images/ideal-img/MBusWirelessLogo.c0cdf50.271.jpg",width:271,height:97}],src:i.p+"assets/images/ideal-img/MBusWirelessLogo.c0cdf50.271.jpg",toString:function(){return i.p+"assets/images/ideal-img/MBusWirelessLogo.c0cdf50.271.jpg"},placeholder:void 0,width:271,height:97},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAEAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIH/8QAHxAAAgEEAgMAAAAAAAAAAAAAAQMCAAQFESEiMWGR/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAT/xAAXEQADAQAAAAAAAAAAAAAAAAAAAREh/9oADAMBAAIRAxEAPwDcMxhF2IS+2vL5bZyLCYt12IO/A9n7UnJ5BBKYXrTFfQGQjI6HHJI5NKVZKtB//9k="}},4141:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.29c352d.1600.jpg 1600w,"+i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.cf2dfc6.1761.jpg 1761w",images:[{path:i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.29c352d.1600.jpg",width:1600,height:838},{path:i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.cf2dfc6.1761.jpg",width:1761,height:922}],src:i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.29c352d.1600.jpg",toString:function(){return i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.29c352d.1600.jpg"},placeholder:void 0,width:1600,height:838},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAFAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAUH/8QAHhAAAgEEAwEAAAAAAAAAAAAAAQIDAAQFEQYhURP/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/EABgRAAIDAAAAAAAAAAAAAAAAAAABAiEx/9oADAMBAAIRAxEAPwDaOExPa23IrhZWYfV5Sje6brfm6rYvKNc4y0naCMNLCjkAnolQfaUqzpsLD//Z"}},7087:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/pdf.5694bab.32.png 32w",images:[{path:i.p+"assets/images/ideal-img/pdf.5694bab.32.png",width:32,height:32}],src:i.p+"assets/images/ideal-img/pdf.5694bab.32.png",toString:function(){return i.p+"assets/images/ideal-img/pdf.5694bab.32.png"},placeholder:void 0,width:32,height:32},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsSAAALEgHS3X78AAABP0lEQVR4nE3NsUsCcRQH8B+t7f0RRUtTs1MQBIGEcULY1laTQ0UgNBSEJOF5Z2eZmCQRWEND6pDDUdFQVC5SYwoFyan3+909/cbvoq7f8vh93+e9xxhjjILTISe+feEkdk4cba8ojNSpE10+xsjwuOyDsSFZWV9PVgFgABAsC+h2+/JPevIdjI2x38czenkAwHKJc0NzeSHnWoAtcX9z48yHadXbaAEkCjkII4WOECQznjUqPjR+YOfGJB5bBY+tQURXCLcmeDH/D+azVXx+gNajRPVnOQOn/kSwbfCDdNWH+2pFNu9qNbo2TZyXSnhpNLzTPT3pw15GK8tQO8rxrXjcDSqKe//wyD14qJf/INTEpQxFq0l2q4n22ysG7S9vI9TdKx9OBUZFaGYRC3MKIqEwliJhmp9VSGaByQmJvgHSpvp4oAQ9ewAAAABJRU5ErkJggg=="}},7731:(e,n,i)=>{"use strict";i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>A,frontMatter:()=>o,metadata:()=>t,toc:()=>d});var s=i(4848),r=i(8453);const o={sidebar_position:0,title:"Introduction"},a="app-nrf9160-wmbus",t={id:"components/firmware/app-nrf9160-wmbus/introduction",title:"Introduction",description:"This page describes the Lobaro wireless M-Bus gateway firmware, called app-nrf9160-wmbus, which is executable on",source:"@site/docs/components/firmware/app-nrf9160-wmbus/introduction.md",sourceDirName:"components/firmware/app-nrf9160-wmbus",slug:"/components/firmware/app-nrf9160-wmbus/introduction",permalink:"/iot/components/firmware/app-nrf9160-wmbus/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-nrf9160-wmbus/introduction.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,title:"Introduction"},sidebar:"allDocSidebar",previous:{title:"Firmware Manuals",permalink:"/iot/components/firmware/"},next:{title:"Configuration Parameter",permalink:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter"}},l={},d=[{value:"Firmware Introduction",id:"firmware-introduction",level:2},{value:"Compatible Metering Protocols",id:"compatible-metering-protocols",level:2},{value:"Wireless M-BUS S1, C1 or T1",id:"wireless-m-bus-s1-c1-or-t1",level:3},{value:"Sensus RF Bubble UP",id:"sensus-rf-bubble-up",level:3},{value:"ME-Funk",id:"me-funk",level:3},{value:"Working Principle",id:"working-principle",level:2},{value:"CRON based Scans",id:"cron-based-scans",level:3},{value:"Daily Status Message",id:"daily-status-message",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Image:o}=n;return o||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"app-nrf9160-wmbus",children:"app-nrf9160-wmbus"}),"\n",(0,s.jsxs)(n.p,{children:["This page describes the Lobaro wireless M-Bus gateway firmware, called ",(0,s.jsx)(n.code,{children:"app-nrf9160-wmbus"}),", which is executable on\ndifferent hardware variants which are in turn used to build different products. Nevertheless, this common description is\nvalid for all products independently which hardware it actually runs on."]}),"\n",(0,s.jsx)(n.h2,{id:"firmware-introduction",children:"Firmware Introduction"}),"\n",(0,s.jsx)(o,{alt:"Lobaro wireless M-BUS Gateway firmware",img:i(4141),style:{width:"80%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,s.jsx)(n.p,{children:"The Lobaro wireless M-Bus gateways collect consumption values from up to 650(*) commercially available water\nmeters, heat\nmeters, heat cost allocators or similar with 868 MHz wireless M-Bus radio interface, Sensus RF Bubble Up or M\xfcller Funk\nand forward them encrypted via NB-IoT or LTE-M cellular radio or alternatively LoRaWAN networks for further processing\non the Internet."}),"\n",(0,s.jsx)(n.p,{children:"Additionally, the gateway hardware may be equipped with a sensor addon board which can provide additional sensor\nmeasurement values beside the collected metering data. If an addon is present depends on the actual product running this\nfirmware."}),"\n",(0,s.jsx)(n.p,{children:"Forwarded meter values are transmitted, optionally additionally encrypted via DTLS, to a shared or private instance of\nthe Lobaro IoT platform and can be viewed there or downloaded as a CSV file. Alternatively, standardised APIs such as\nMQTT, HTTP Push, SFTP or a REST interface are available to connect downstream systems or platforms easily and securely.\nWhen using LoRaWAN, the Lobaro Platform is optional. When using NB-IoT or LTE-M, on the other hand, it is mandatory.\nThis requirement is explained in the Lobaro IoT Platform FAQ."}),"\n",(0,s.jsx)(n.p,{children:"Thanks to the new NB-IoT mobile radio, optimised for sensor data, remote reading even works in places such as basements\nwhere smartphones have poor or no reception."}),"\n",(0,s.jsx)(n.p,{children:"(*) based on average telegram size 75 Bytes. On request, the capacity for meter telegrams can be increased to up to\n2,500 by means of an additional built-in memory."}),"\n",(0,s.jsx)(n.h2,{id:"compatible-metering-protocols",children:"Compatible Metering Protocols"}),"\n",(0,s.jsx)(o,{alt:"Lobaro wireless M-BUS Gateway firmware",img:i(9215),style:{width:"20%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,s.jsx)(n.h3,{id:"wireless-m-bus-s1-c1-or-t1",children:"Wireless M-BUS S1, C1 or T1"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Unidirectional 868 MHz modes following DIN EN 13757-4."}),"\n",(0,s.jsx)(n.li,{children:"Open metering specification (OMS, Annex O): PHY_A - 868 MHz (uplink only)"}),"\n",(0,s.jsx)(n.li,{children:"Qundis AMR"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"sensus-rf-bubble-up",children:"Sensus RF Bubble UP"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Manufacturer specific radio protocol for 868 MHz (Xylem Inc.)."}),"\n",(0,s.jsx)(n.li,{children:"Unidirectional bubble up mode is supported."}),"\n",(0,s.jsx)(n.li,{children:"\u26a0\ufe0f Decoding of Sensus RF telegrams needs the Lobaro telegram parser and unfortunately can't be disclosed."}),"\n"]}),"\n",(0,s.jsx)("table",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)(o,{alt:"PDF Download",img:i(7087),style:{width:"32px"}})}),(0,s.jsx)("td",{children:(0,s.jsx)("a",{target:"\\_blank",href:i(5203).A,children:"Sensus RF Brochure"})})]})}),"\n",(0,s.jsx)(n.h3,{id:"me-funk",children:"ME-Funk"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:['A.k.a. "M\xfcller Funk" - Manufacturer specific radio protocol for 868\nMHz (',(0,s.jsx)(n.a,{href:"https://www.mue-line.de/allgemeine-informationen/",children:"M\xfcller-electronic GmbH"}),")."]}),"\n",(0,s.jsx)(n.li,{children:"\u26a0\ufe0f Decoding of ME-Funk telegrams needs the Lobaro telegram parser and unfortunately can't be disclosed."}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsx)(n.p,{children:"433 MHz variants are available on products equipped with the additional 433 MHz hardware addon for the following\nspecifications:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Wireless M-Bus, Open metering specification (OMS, Annex O): PHY_B - 433 MHz (uplink only)"}),"\n",(0,s.jsx)(n.li,{children:"Sensus RF Bubble UP 433 MHz - Manufacturer specific (Xylem Inc.) radio protocol"}),"\n"]})]}),"\n",(0,s.jsx)(n.h2,{id:"working-principle",children:"Working Principle"}),"\n",(0,s.jsx)(n.p,{children:"The firmware remains in power-saving mode while not active most of the time. It leaves the low power sleep mode in the\nfollowing situations:"}),"\n",(0,s.jsx)(n.h3,{id:"cron-based-scans",children:"CRON based Scans"}),"\n",(0,s.jsxs)(n.p,{children:["The firmware is configured by its ",(0,s.jsx)(n.code,{children:"listenCron"})," configuration parameter to wake up at regular intervals to collect / scan\nfor\nmetering\ntelegrams over its 868 MHz wireless interface. The following sequence of operations is executed on each cron triggering:"]}),"\n",(0,s.jsx)(n.admonition,{title:"CRON configuration parameter",type:"tip",children:(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.a,{href:"/iot/configuration/cron-configuration",children:["Click here to learn more about ",(0,s.jsx)(n.strong,{children:"cron configuration"})," parameters"]}),"."]})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Wait in deep sleep low power mode for ",(0,s.jsx)(n.code,{children:"listenCron"})," to trigger"]}),"\n",(0,s.jsxs)(n.li,{children:["Collect metering data in all enabled wireless modes sequentially","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Collect C1-Mode and T1-Mode telegrams (wMBUS) in parallel for ",(0,s.jsx)(n.code,{children:"cmodeDurSec"})," seconds (if not 0)"]}),"\n",(0,s.jsxs)(n.li,{children:["Collect S1-Mode telegrams (wMBUS) for ",(0,s.jsx)(n.code,{children:"smodeDurSec"})," seconds (if not 0)"]}),"\n",(0,s.jsxs)(n.li,{children:["Collect X-Mode telegrams (Sensus RF) for ",(0,s.jsx)(n.code,{children:"xmodeDurSec"})," seconds (if not 0)"]}),"\n",(0,s.jsxs)(n.li,{children:["Collect U-Mode telegrams (M\xfcller Funk) for ",(0,s.jsx)(n.code,{children:"umodeDurSec"})," seconds (if not 0)"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:"Optional: Perform sensor measurement using the optional hardware addon (only if any sensor addon installed)"}),"\n",(0,s.jsxs)(n.li,{children:["Upload all stored data via NB-IoT / LTE-CatM1 or LoRaWAN (depends on ",(0,s.jsx)(n.code,{children:"WAN"})," configuration)","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Upload all collected metering telegrams, status and sensor data"}),"\n",(0,s.jsxs)(n.li,{children:["When the upload fails the upload is retried every 24h after daily status or until the next ",(0,s.jsx)(n.code,{children:"listenCron"})," triggers."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Sleep till next ",(0,s.jsx)(n.code,{children:"listenCron"})," triggers or status message upload."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"This sequence also will be executed one after any device startup oder manual reset."})}),"\n",(0,s.jsx)(n.admonition,{title:"Raw telegrams",type:"note",children:(0,s.jsxs)(n.p,{children:['All meter telegrams are received "as is", e.g. encrypted or plain over the air. Only the always readable telegram header\ninformation is parsed for internal filtering and deduplication. Parsing and decryption of such raw metering data happens\nin the backend, e.g. in\nthe Lobaro head end system or any other connected system. Lobaro offers a standalone ',(0,s.jsx)(n.a,{href:"https://www.mbus.org",children:"REST API (www.mbus.org)"}),"\nfor raw (wireless) M-BUS telegrams parsing which can be licensed."]})}),"\n",(0,s.jsx)(n.h3,{id:"daily-status-message",children:"Daily Status Message"}),"\n",(0,s.jsx)(n.p,{children:"Once a day the firmware sends a status message. This allows for reaching the device, e.g. for changing the\nconfiguration, at least once a day independent of the configured regular scan interval (see above). This status message\ncontains information on many vital parameters of the gateway."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Upload status telegram normally at midnight ",(0,s.jsx)(n.strong,{children:"0:00h (UTC+0)"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Solar-powered hardware variants: noon ",(0,s.jsx)(n.strong,{children:"12:00h (UTC+0)"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:"Upload remaining telegrams in memory, if any failures happened during previous attempts."}),"\n",(0,s.jsxs)(n.li,{children:["Sleep till next ",(0,s.jsx)(n.code,{children:"listenCron"})," or next days status telegram."]}),"\n"]})]})}function A(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},5203:(e,n,i)=>{"use strict";i.d(n,{A:()=>s});const s=i.p+"assets/files/en---sensusrf-brochure-59b7f198b43913b0d70122d43e7dfb36.pdf"},8453:(e,n,i)=>{"use strict";i.d(n,{R:()=>a,x:()=>t});var s=i(6540);const r={},o=s.createContext(r);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/93880fc8.fc6e3ef2.js b/assets/js/93880fc8.fc6e3ef2.js deleted file mode 100644 index b0c9c2cd..00000000 --- a/assets/js/93880fc8.fc6e3ef2.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1944],{9215:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/MBusWirelessLogo.c0cdf50.271.jpg 271w",images:[{path:i.p+"assets/images/ideal-img/MBusWirelessLogo.c0cdf50.271.jpg",width:271,height:97}],src:i.p+"assets/images/ideal-img/MBusWirelessLogo.c0cdf50.271.jpg",toString:function(){return i.p+"assets/images/ideal-img/MBusWirelessLogo.c0cdf50.271.jpg"},placeholder:void 0,width:271,height:97},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAEAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIH/8QAHxAAAgEEAgMAAAAAAAAAAAAAAQMCAAQFESEiMWGR/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAT/xAAXEQADAQAAAAAAAAAAAAAAAAAAAREh/9oADAMBAAIRAxEAPwDcMxhF2IS+2vL5bZyLCYt12IO/A9n7UnJ5BBKYXrTFfQGQjI6HHJI5NKVZKtB//9k="}},4141:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.29c352d.1600.jpg 1600w,"+i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.cf2dfc6.1761.jpg 1761w",images:[{path:i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.29c352d.1600.jpg",width:1600,height:838},{path:i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.cf2dfc6.1761.jpg",width:1761,height:922}],src:i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.29c352d.1600.jpg",toString:function(){return i.p+"assets/images/ideal-img/wmbus-gateway-bridge-lora-nb-iot.29c352d.1600.jpg"},placeholder:void 0,width:1600,height:838},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAFAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAUH/8QAHhAAAgEEAwEAAAAAAAAAAAAAAQIDAAQFEQYhURP/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/EABgRAAIDAAAAAAAAAAAAAAAAAAABAiEx/9oADAMBAAIRAxEAPwDaOExPa23IrhZWYfV5Sje6brfm6rYvKNc4y0naCMNLCjkAnolQfaUqzpsLD//Z"}},7087:(e,n,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/pdf.5694bab.32.png 32w",images:[{path:i.p+"assets/images/ideal-img/pdf.5694bab.32.png",width:32,height:32}],src:i.p+"assets/images/ideal-img/pdf.5694bab.32.png",toString:function(){return i.p+"assets/images/ideal-img/pdf.5694bab.32.png"},placeholder:void 0,width:32,height:32},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsSAAALEgHS3X78AAABP0lEQVR4nE3NsUsCcRQH8B+t7f0RRUtTs1MQBIGEcULY1laTQ0UgNBSEJOF5Z2eZmCQRWEND6pDDUdFQVC5SYwoFyan3+909/cbvoq7f8vh93+e9xxhjjILTISe+feEkdk4cba8ojNSpE10+xsjwuOyDsSFZWV9PVgFgABAsC+h2+/JPevIdjI2x38czenkAwHKJc0NzeSHnWoAtcX9z48yHadXbaAEkCjkII4WOECQznjUqPjR+YOfGJB5bBY+tQURXCLcmeDH/D+azVXx+gNajRPVnOQOn/kSwbfCDdNWH+2pFNu9qNbo2TZyXSnhpNLzTPT3pw15GK8tQO8rxrXjcDSqKe//wyD14qJf/INTEpQxFq0l2q4n22ysG7S9vI9TdKx9OBUZFaGYRC3MKIqEwliJhmp9VSGaByQmJvgHSpvp4oAQ9ewAAAABJRU5ErkJggg=="}},7731:(e,n,i)=>{"use strict";i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>A,frontMatter:()=>o,metadata:()=>t,toc:()=>d});var s=i(4848),r=i(8453);const o={sidebar_position:0,displayed_sidebar:"componentsSidebar",title:"Introduction"},a="app-nrf9160-wmbus",t={id:"components/firmware/app-nrf9160-wmbus/introduction",title:"Introduction",description:"This page describes the Lobaro wireless M-Bus gateway firmware, called app-nrf9160-wmbus, which is executable on",source:"@site/docs/components/firmware/app-nrf9160-wmbus/introduction.md",sourceDirName:"components/firmware/app-nrf9160-wmbus",slug:"/components/firmware/app-nrf9160-wmbus/introduction",permalink:"/iot/components/firmware/app-nrf9160-wmbus/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-nrf9160-wmbus/introduction.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,displayed_sidebar:"componentsSidebar",title:"Introduction"},sidebar:"componentsSidebar",previous:{title:"Firmware Manuals",permalink:"/iot/components/firmware/"},next:{title:"Configuration Parameter",permalink:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter"}},l={},d=[{value:"Firmware Introduction",id:"firmware-introduction",level:2},{value:"Compatible Metering Protocols",id:"compatible-metering-protocols",level:2},{value:"Wireless M-BUS S1, C1 or T1",id:"wireless-m-bus-s1-c1-or-t1",level:3},{value:"Sensus RF Bubble UP",id:"sensus-rf-bubble-up",level:3},{value:"ME-Funk",id:"me-funk",level:3},{value:"Working Principle",id:"working-principle",level:2},{value:"CRON based Scans",id:"cron-based-scans",level:3},{value:"Daily Status Message",id:"daily-status-message",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Image:o}=n;return o||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"app-nrf9160-wmbus",children:"app-nrf9160-wmbus"}),"\n",(0,s.jsxs)(n.p,{children:["This page describes the Lobaro wireless M-Bus gateway firmware, called ",(0,s.jsx)(n.code,{children:"app-nrf9160-wmbus"}),", which is executable on\ndifferent hardware variants which are in turn used to build different products. Nevertheless, this common description is\nvalid for all products independently which hardware it actually runs on."]}),"\n",(0,s.jsx)(n.h2,{id:"firmware-introduction",children:"Firmware Introduction"}),"\n",(0,s.jsx)(o,{alt:"Lobaro wireless M-BUS Gateway firmware",img:i(4141),style:{width:"80%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,s.jsx)(n.p,{children:"The Lobaro wireless M-Bus gateways collect consumption values from up to 650(*) commercially available water\nmeters, heat\nmeters, heat cost allocators or similar with 868 MHz wireless M-Bus radio interface, Sensus RF Bubble Up or M\xfcller Funk\nand forward them encrypted via NB-IoT or LTE-M cellular radio or alternatively LoRaWAN networks for further processing\non the Internet."}),"\n",(0,s.jsx)(n.p,{children:"Additionally, the gateway hardware may be equipped with a sensor addon board which can provide additional sensor\nmeasurement values beside the collected metering data. If an addon is present depends on the actual product running this\nfirmware."}),"\n",(0,s.jsx)(n.p,{children:"Forwarded meter values are transmitted, optionally additionally encrypted via DTLS, to a shared or private instance of\nthe Lobaro IoT platform and can be viewed there or downloaded as a CSV file. Alternatively, standardised APIs such as\nMQTT, HTTP Push, SFTP or a REST interface are available to connect downstream systems or platforms easily and securely.\nWhen using LoRaWAN, the Lobaro Platform is optional. When using NB-IoT or LTE-M, on the other hand, it is mandatory.\nThis requirement is explained in the Lobaro IoT Platform FAQ."}),"\n",(0,s.jsx)(n.p,{children:"Thanks to the new NB-IoT mobile radio, optimised for sensor data, remote reading even works in places such as basements\nwhere smartphones have poor or no reception."}),"\n",(0,s.jsx)(n.p,{children:"(*) based on average telegram size 75 Bytes. On request, the capacity for meter telegrams can be increased to up to\n2,500 by means of an additional built-in memory."}),"\n",(0,s.jsx)(n.h2,{id:"compatible-metering-protocols",children:"Compatible Metering Protocols"}),"\n",(0,s.jsx)(o,{alt:"Lobaro wireless M-BUS Gateway firmware",img:i(9215),style:{width:"20%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,s.jsx)(n.h3,{id:"wireless-m-bus-s1-c1-or-t1",children:"Wireless M-BUS S1, C1 or T1"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Unidirectional 868 MHz modes following DIN EN 13757-4."}),"\n",(0,s.jsx)(n.li,{children:"Open metering specification (OMS, Annex O): PHY_A - 868 MHz (uplink only)"}),"\n",(0,s.jsx)(n.li,{children:"Qundis AMR"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"sensus-rf-bubble-up",children:"Sensus RF Bubble UP"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Manufacturer specific radio protocol for 868 MHz (Xylem Inc.)."}),"\n",(0,s.jsx)(n.li,{children:"Unidirectional bubble up mode is supported."}),"\n",(0,s.jsx)(n.li,{children:"\u26a0\ufe0f Decoding of Sensus RF telegrams needs the Lobaro telegram parser and unfortunately can't be disclosed."}),"\n"]}),"\n",(0,s.jsx)("table",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)(o,{alt:"PDF Download",img:i(7087),style:{width:"32px"}})}),(0,s.jsx)("td",{children:(0,s.jsx)("a",{target:"\\_blank",href:i(5203).A,children:"Sensus RF Brochure"})})]})}),"\n",(0,s.jsx)(n.h3,{id:"me-funk",children:"ME-Funk"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:['A.k.a. "M\xfcller Funk" - Manufacturer specific radio protocol for 868\nMHz (',(0,s.jsx)(n.a,{href:"https://www.mue-line.de/allgemeine-informationen/",children:"M\xfcller-electronic GmbH"}),")."]}),"\n",(0,s.jsx)(n.li,{children:"\u26a0\ufe0f Decoding of ME-Funk telegrams needs the Lobaro telegram parser and unfortunately can't be disclosed."}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsx)(n.p,{children:"433 MHz variants are available on products equipped with the additional 433 MHz hardware addon for the following\nspecifications:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Wireless M-Bus, Open metering specification (OMS, Annex O): PHY_B - 433 MHz (uplink only)"}),"\n",(0,s.jsx)(n.li,{children:"Sensus RF Bubble UP 433 MHz - Manufacturer specific (Xylem Inc.) radio protocol"}),"\n"]})]}),"\n",(0,s.jsx)(n.h2,{id:"working-principle",children:"Working Principle"}),"\n",(0,s.jsx)(n.p,{children:"The firmware remains in power-saving mode while not active most of the time. It leaves the low power sleep mode in the\nfollowing situations:"}),"\n",(0,s.jsx)(n.h3,{id:"cron-based-scans",children:"CRON based Scans"}),"\n",(0,s.jsxs)(n.p,{children:["The firmware is configured by its ",(0,s.jsx)(n.code,{children:"listenCron"})," configuration parameter to wake up at regular intervals to collect / scan\nfor\nmetering\ntelegrams over its 868 MHz wireless interface. The following sequence of operations is executed on each cron triggering:"]}),"\n",(0,s.jsx)(n.admonition,{title:"CRON configuration parameter",type:"tip",children:(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.a,{href:"/iot/configuration/cron-configuration",children:["Click here to learn more about ",(0,s.jsx)(n.strong,{children:"cron configuration"})," parameters"]}),"."]})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Wait in deep sleep low power mode for ",(0,s.jsx)(n.code,{children:"listenCron"})," to trigger"]}),"\n",(0,s.jsxs)(n.li,{children:["Collect metering data in all enabled wireless modes sequentially","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Collect C1-Mode and T1-Mode telegrams (wMBUS) in parallel for ",(0,s.jsx)(n.code,{children:"cmodeDurSec"})," seconds (if not 0)"]}),"\n",(0,s.jsxs)(n.li,{children:["Collect S1-Mode telegrams (wMBUS) for ",(0,s.jsx)(n.code,{children:"smodeDurSec"})," seconds (if not 0)"]}),"\n",(0,s.jsxs)(n.li,{children:["Collect X-Mode telegrams (Sensus RF) for ",(0,s.jsx)(n.code,{children:"xmodeDurSec"})," seconds (if not 0)"]}),"\n",(0,s.jsxs)(n.li,{children:["Collect U-Mode telegrams (M\xfcller Funk) for ",(0,s.jsx)(n.code,{children:"umodeDurSec"})," seconds (if not 0)"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:"Optional: Perform sensor measurement using the optional hardware addon (only if any sensor addon installed)"}),"\n",(0,s.jsxs)(n.li,{children:["Upload all stored data via NB-IoT / LTE-CatM1 or LoRaWAN (depends on ",(0,s.jsx)(n.code,{children:"WAN"})," configuration)","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Upload all collected metering telegrams, status and sensor data"}),"\n",(0,s.jsxs)(n.li,{children:["When the upload fails the upload is retried every 24h after daily status or until the next ",(0,s.jsx)(n.code,{children:"listenCron"})," triggers."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Sleep till next ",(0,s.jsx)(n.code,{children:"listenCron"})," triggers or status message upload."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"This sequence also will be executed one after any device startup oder manual reset."})}),"\n",(0,s.jsx)(n.admonition,{title:"Raw telegrams",type:"note",children:(0,s.jsxs)(n.p,{children:['All meter telegrams are received "as is", e.g. encrypted or plain over the air. Only the always readable telegram header\ninformation is parsed for internal filtering and deduplication. Parsing and decryption of such raw metering data happens\nin the backend, e.g. in\nthe Lobaro head end system or any other connected system. Lobaro offers a standalone ',(0,s.jsx)(n.a,{href:"https://www.mbus.org",children:"REST API (www.mbus.org)"}),"\nfor raw (wireless) M-BUS telegrams parsing which can be licensed."]})}),"\n",(0,s.jsx)(n.h3,{id:"daily-status-message",children:"Daily Status Message"}),"\n",(0,s.jsx)(n.p,{children:"Once a day the firmware sends a status message. This allows for reaching the device, e.g. for changing the\nconfiguration, at least once a day independent of the configured regular scan interval (see above). This status message\ncontains information on many vital parameters of the gateway."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Upload status telegram normally at midnight ",(0,s.jsx)(n.strong,{children:"0:00h (UTC+0)"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Solar-powered hardware variants: noon ",(0,s.jsx)(n.strong,{children:"12:00h (UTC+0)"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:"Upload remaining telegrams in memory, if any failures happened during previous attempts."}),"\n",(0,s.jsxs)(n.li,{children:["Sleep till next ",(0,s.jsx)(n.code,{children:"listenCron"})," or next days status telegram."]}),"\n"]})]})}function A(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},5203:(e,n,i)=>{"use strict";i.d(n,{A:()=>s});const s=i.p+"assets/files/en---sensusrf-brochure-59b7f198b43913b0d70122d43e7dfb36.pdf"},8453:(e,n,i)=>{"use strict";i.d(n,{R:()=>a,x:()=>t});var s=i(6540);const r={},o=s.createContext(r);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9c21640e.6ff0870c.js b/assets/js/9c21640e.6ff0870c.js new file mode 100644 index 00000000..5917a165 --- /dev/null +++ b/assets/js/9c21640e.6ff0870c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[6679],{6294:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=n(4848),r=n(8453);const a={sidebar_position:1},i="Description",o={id:"products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2",slug:"/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow"},next:{title:"Wired M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.admonition,{type:"warning",children:(0,t.jsx)(s.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(s.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(s.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(s.p,{children:["Get started by ",(0,t.jsx)(s.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Or ",(0,t.jsx)(s.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(s.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(s.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(s.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(s.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(s.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(s.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(s.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Open ",(0,t.jsx)(s.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(s.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>o});var t=n(6540);const r={},a=t.createContext(r);function i(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9c21640e.a01c6c7d.js b/assets/js/9c21640e.a01c6c7d.js deleted file mode 100644 index 3eb0509c..00000000 --- a/assets/js/9c21640e.a01c6c7d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[6679],{6294:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=n(4848),r=n(8453);const a={sidebar_position:1},i="Description",o={id:"products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2",slug:"/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow"},next:{title:"Wired M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.admonition,{type:"warning",children:(0,t.jsx)(s.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(s.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(s.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(s.p,{children:["Get started by ",(0,t.jsx)(s.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Or ",(0,t.jsx)(s.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(s.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(s.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(s.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(s.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(s.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(s.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(s.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Open ",(0,t.jsx)(s.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(s.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>o});var t=n(6540);const r={},a=t.createContext(r);function i(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5750849.5ab93479.js b/assets/js/a5750849.5ab93479.js deleted file mode 100644 index efc49969..00000000 --- a/assets/js/a5750849.5ab93479.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1148],{5095:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/Lobaro_Tool_ConfigFeature.d276502.1224.png 1224w",images:[{path:i.p+"assets/images/ideal-img/Lobaro_Tool_ConfigFeature.d276502.1224.png",width:1224,height:730}],src:i.p+"assets/images/ideal-img/Lobaro_Tool_ConfigFeature.d276502.1224.png",toString:function(){return i.p+"assets/images/ideal-img/Lobaro_Tool_ConfigFeature.d276502.1224.png"},placeholder:void 0,width:1224,height:730},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgklEQVR4nC2MQQ7CMAwE8/8HwoEi7kW0SZTG9q6doCDmNHOZdOacSzZVACDhvgSUdtX3nuq+15KP2i6RXks/PqYipi3n8nyksm3a2iWq9OP1Ou83cl0IwJmMHhEiMiIM4BjuPuckqaoJZu7svUfEiJjjD0kzS4ABZqbu68cf7uQq+wK1c63N5QE9AAAAAABJRU5ErkJggg=="}},7768:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/tool-config-flash.ea677cb.1228.png 1228w",images:[{path:i.p+"assets/images/ideal-img/tool-config-flash.ea677cb.1228.png",width:1228,height:605}],src:i.p+"assets/images/ideal-img/tool-config-flash.ea677cb.1228.png",toString:function(){return i.p+"assets/images/ideal-img/tool-config-flash.ea677cb.1228.png"},placeholder:void 0,width:1228,height:605},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgElEQVR4nG3JUQqCQBhF4dl/EASllUKtooeIIGgPtQIfzTSb/446J5AgAi983Ifjrpczp+OBzXpJnqXsd/kozxKybUK6WpDMZ9GpbQkSQ4xMLUp0RYEr7zeaR0VZv6ie1ahparx/j8w8FgxnZgxxwJshGfp+CPqR4STR991/mPABrsC4zAIkdt8AAAAASUVORK5CYII="}},2019:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/tool-config-loaded.ecd8f96.1248.png 1248w",images:[{path:i.p+"assets/images/ideal-img/tool-config-loaded.ecd8f96.1248.png",width:1248,height:643}],src:i.p+"assets/images/ideal-img/tool-config-loaded.ecd8f96.1248.png",toString:function(){return i.p+"assets/images/ideal-img/tool-config-loaded.ecd8f96.1248.png"},placeholder:void 0,width:1248,height:643},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAArklEQVR4nB2KwUoDQRBE55+j4q6yCIkHf2Bv6tEf8KYgcT0mUSEEwXUOih4lGNLuzHTPC5mCRz2Kcpc3V7TXLcfjivr8hObirFBNaqpxzUFzyNHpKLupf+HBv3LXPzP9XPLYL+je5zzt/WvF/duMrrvFSf9B2mwRSViG9P3D4D0l2UrZZo0T2RJjZAgDakoy5T8MJNWyS4zEv19cCAHVhIhgOWNm5ZD3rkqIEUuJHXKrsKwTcDxUAAAAAElFTkSuQmCC"}},6001:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/tool-config-logs.405ab33.1458.png 1458w",images:[{path:i.p+"assets/images/ideal-img/tool-config-logs.405ab33.1458.png",width:1458,height:1002}],src:i.p+"assets/images/ideal-img/tool-config-logs.405ab33.1458.png",toString:function(){return i.p+"assets/images/ideal-img/tool-config-logs.405ab33.1458.png"},placeholder:void 0,width:1458,height:1002},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxUlEQVR4nGWOu07EMAAE/d8UILhAwnEtDaKmgW86KYnz1In4lTh2yCBMhVhptMVOseLj/Y3Xl2fy+1uORcbp+MDpKeexyCjyO7LDDYfrq13E2bFtG/u+s/M/XzESxgGhzmdW7/mcFJM2KG3QRmOdwznLPDuW4BEhRrYYaaRESklVVanbtk1M04Q1BhFDYF09UtbUdZ3Esixpmoau635FZxExBha/pKHve4ZhQCmFtRZjTOofRAgr3i8MreQyjmitmdO/v3wDWVgAL2Yh6GYAAAAASUVORK5CYII="}},553:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/tool-connect-auto.bec75f4.1224.png 1224w",images:[{path:i.p+"assets/images/ideal-img/tool-connect-auto.bec75f4.1224.png",width:1224,height:605}],src:i.p+"assets/images/ideal-img/tool-connect-auto.bec75f4.1224.png",toString:function(){return i.p+"assets/images/ideal-img/tool-connect-auto.bec75f4.1224.png"},placeholder:void 0,width:1224,height:605},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAlklEQVR4nD2NywpBURhG90OT+yUPYaBOyfuIgQxESQYGctrnwn/hLB1ksPpaa/KFxTwhmU0Z9luMBm0m496H2vvdJp12g26nUYXqKajcKYocM8Hd8Kfjpqg7ZYzEw56wWq7JzjtimlKoE09H0u0GVUFq7iWSZ4Tr5YLlN0wfqBlSFkgWMVNM5btuhOr1ooJv+MX6+u8/3nV9s9SCuj06AAAAAElFTkSuQmCC"}},4084:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/tool-show-logfiles.7348375.321.png 321w",images:[{path:i.p+"assets/images/ideal-img/tool-show-logfiles.7348375.321.png",width:321,height:95}],src:i.p+"assets/images/ideal-img/tool-show-logfiles.7348375.321.png",toString:function(){return i.p+"assets/images/ideal-img/tool-show-logfiles.7348375.321.png"},placeholder:void 0,width:321,height:95},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAW0lEQVR4nB3CQQpAUBQF0L82K5AFWIip/ZgoE2NF5lYg+aLeu+++LzNxOsEAty//BkAVIgaoSCAQ9T4knZouf7DHuSjHLF+qGkAgaXT3RLqnm6pb169NG4fJyBfVF0/moQP9/AAAAABJRU5ErkJggg=="}},2640:(e,o,i)=>{"use strict";i.r(o),i.d(o,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var n=i(4848),t=i(8453);const a={sidebar_position:2,displayed_sidebar:"configurationSidebar",title:"Lobaro Config Tool"},s="Lobaro Config Tool",r={id:"configuration/lobaro-config-tool",title:"Lobaro Config Tool",description:"The Lobaro Config Tool (a.k.a. Lobaro Maintenance Tool) can be used to configure and diagnose Lobaro devices locally using a PC and our special",source:"@site/docs/configuration/lobaro-config-tool.md",sourceDirName:"configuration",slug:"/configuration/lobaro-config-tool",permalink:"/iot/configuration/lobaro-config-tool",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/lobaro-config-tool.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,displayed_sidebar:"configurationSidebar",title:"Lobaro Config Tool"},sidebar:"configurationSidebar",previous:{title:"Lobaro USB Config Adapter",permalink:"/iot/configuration/usb-config-adapter"},next:{title:"MBUS Reception Filtering",permalink:"/iot/configuration/meter-reception-filter-config"}},l={},c=[{value:"Download",id:"download",level:2},{value:"System Requirements",id:"system-requirements",level:2},{value:"Operating systems",id:"operating-systems",level:3},{value:"Default UART config",id:"default-uart-config",level:3},{value:"Installation",id:"installation",level:2},{value:"Windows",id:"windows",level:3},{value:"macOS / Linux",id:"macos--linux",level:3},{value:"Connection Setup",id:"connection-setup",level:2},{value:"Device Configuration",id:"device-configuration",level:2},{value:"Device Uart Logging",id:"device-uart-logging",level:2},{value:"Restarting",id:"restarting",level:3},{value:"Log-Files",id:"log-files",level:3},{value:"Sending to the device",id:"sending-to-the-device",level:3},{value:"Log parsing",id:"log-parsing",level:3},{value:"Device Firmwareupdate",id:"fwupdate",level:2},{value:"Getting the firmware",id:"getting-the-firmware",level:3},{value:"Installing new firmware",id:"installing-new-firmware",level:3}];function d(e){const o={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components},{Image:a}=o;return a||function(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"lobaro-config-tool",children:"Lobaro Config Tool"}),"\n",(0,n.jsxs)(o.p,{children:["The Lobaro Config Tool (a.k.a. Lobaro Maintenance Tool) can be used to configure and diagnose Lobaro devices locally using a PC and our special\n",(0,n.jsx)(o.a,{href:"/iot/configuration/usb-config-adapter",children:"USB configuration adapter"}),". It's available as free ",(0,n.jsx)(o.a,{href:"#download",children:"download"})," for all common\noperating systems."]}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool",img:i(5095),style:{width:"60%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,n.jsx)(o.h2,{id:"download",children:"Download"}),"\n",(0,n.jsxs)(o.p,{children:["See: ",(0,n.jsx)(o.a,{href:"https://github.com/lobaro/flash-tool-release/releases",children:"https://github.com/lobaro/flash-tool-release/releases"})]}),"\n",(0,n.jsx)(o.admonition,{title:"Select correct Download for your OS",type:"tip",children:(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:["Windows: ",(0,n.jsx)(o.code,{children:"...windows_x86_64.zip"})]}),"\n",(0,n.jsxs)(o.li,{children:["Linux: ",(0,n.jsx)(o.code,{children:"...linux_x86_64.zip"})]}),"\n",(0,n.jsxs)(o.li,{children:["macOS (ARM): ",(0,n.jsx)(o.code,{children:"...mac_arm64.zip"})]}),"\n",(0,n.jsxs)(o.li,{children:["macOS (INTEL): ",(0,n.jsx)(o.code,{children:"...mac_x86_64.zip"})]}),"\n"]})}),"\n",(0,n.jsx)(o.h2,{id:"system-requirements",children:"System Requirements"}),"\n",(0,n.jsx)(o.p,{children:"The tools runs as local webserver and the user frontend is accessed using a standard browser."}),"\n",(0,n.jsx)(o.h3,{id:"operating-systems",children:"Operating systems"}),"\n",(0,n.jsx)(o.p,{children:"The tools is available for the following operating systems:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:"macOS"}),"\n",(0,n.jsx)(o.li,{children:"Windows 7/10/11"}),"\n",(0,n.jsx)(o.li,{children:"Linux"}),"\n"]}),"\n",(0,n.jsx)(o.h3,{id:"default-uart-config",children:"Default UART config"}),"\n",(0,n.jsx)(o.p,{children:"The default uart configuration is:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:"115200 Baud"}),"\n",(0,n.jsx)(o.li,{children:"8 data bits"}),"\n",(0,n.jsx)(o.li,{children:"Even parity"}),"\n",(0,n.jsx)(o.li,{children:"1 stop bot"}),"\n"]}),"\n",(0,n.jsxs)(o.p,{children:["This UART configuration is used by ",(0,n.jsx)(o.strong,{children:"all Lobaro devices"}),' on the "Config" port.']}),"\n",(0,n.jsx)(o.h2,{id:"installation",children:"Installation"}),"\n",(0,n.jsx)(o.h3,{id:"windows",children:"Windows"}),"\n",(0,n.jsx)(o.p,{children:'After downloading unzip and simply start the "lobaro-tool.exe" with double click.'}),"\n",(0,n.jsx)(o.admonition,{type:"info",children:(0,n.jsx)(o.p,{children:"Windows might show up a security warning and ask you to proceed anyway. This behavior is normal."})}),"\n",(0,n.jsx)(o.h3,{id:"macos--linux",children:"macOS / Linux"}),"\n",(0,n.jsx)(o.p,{children:'After downloading and unzip the "lobaro-tool" file, e.g. to a directory "lobaro" in your home path. Then make the tool\nfile executable:'}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:'language-bash"',children:"cd ~/lobaro\nchmod +x lobaro-tool\n./lobaro-tool\n"})}),"\n",(0,n.jsx)(o.h2,{id:"connection-setup",children:"Connection Setup"}),"\n",(0,n.jsxs)(o.p,{children:["Connect your Lobaro Device using the ",(0,n.jsx)(o.a,{href:"/iot/configuration/usb-config-adapter",children:"Lobaro Config Adapter"})," to the USB-port of your computer."]}),"\n",(0,n.jsx)(o.p,{children:"When your device is successfully attached to your computer, you can build a connection with the Lobaro Maintenance Tool."}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool - Automatic Connection",img:i(553),style:{width:"60%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsxs)(o.p,{children:["Under Hardware Connection select ",(0,n.jsx)(o.em,{children:"auto"})," and click ",(0,n.jsx)(o.em,{children:"Connect"}),", as seen in the screenshot above. If you know to which port\nthe\ndevice is connected to your computer (either COM or ttyUSB), you can alternatively select it explicitly instead of using\nauto."]}),"\n",(0,n.jsx)(o.h2,{id:"device-configuration",children:"Device Configuration"}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool - Automatic Connection",img:i(2019),style:{width:"60%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsxs)(o.p,{children:["When you are connected to a Lobaro Device, you can use the Tab named ",(0,n.jsx)(o.strong,{children:"CONFIGURATION"})," to read and change the\nconfiguration\nparameters of the Device. You can read out the current configuration from the device by pressing the Reload Config\nbutton (reading takes a few seconds)."]}),"\n",(0,n.jsxs)(o.admonition,{title:"Automatic device reboot",type:"warning",children:[(0,n.jsx)(o.p,{children:"Every time you use one of the buttons Reload Config. Write to Device, or Restore Default, the connected device will be\nrebooted! Also keep in mind that the operations triggered by pressing the buttons include communication with the device\nover a serial bus and they will take a few seconds."}),(0,n.jsx)(o.p,{children:"To avoid errors, please do not press those buttons repeatedly!"})]}),"\n",(0,n.jsxs)(o.p,{children:["When the configuration is read, you can alter the parameters by clicking on the pencil icon on the right. Values that\nyou changed will printed in bold font. When you have adjusted all values you want to change, you ",(0,n.jsx)(o.strong,{children:"must"})," press\n",(0,n.jsx)(o.em,{children:"Write to Device"})," to actually change anything in the device internal memory! Writing the values will also reboot the\ndevice."]}),"\n",(0,n.jsxs)(o.p,{children:["The Button ",(0,n.jsx)(o.em,{children:"Restore Default"})," will reset all config parameters of the connected Device to their internal default values.\nThe device will reboot, and the listed values of the configuration in the Lobaro Maintenance Tool well be updated."]}),"\n",(0,n.jsx)(o.admonition,{title:"Always reload the config before changing it!",type:"danger",children:(0,n.jsxs)(o.p,{children:["When you are working with multiple devices, make sure that your always press Reload Config after attaching a new device\nbefore you start updating values. If you fail to do so, you might accidentally transfer values from the previously\nattached device to the newly connected. This is especially a problem when working with LoRaWAN sensors, as you will copy\nthe DevEUI from one device to the other! This can be reverted by using the ",(0,n.jsx)(o.em,{children:"Restore Default"})," functionality."]})}),"\n",(0,n.jsxs)(o.p,{children:["You can watch the rebooting of the Device and check the altered configuration parameters by locking in the ",(0,n.jsx)(o.strong,{children:"LOGS"})," Tab."]}),"\n",(0,n.jsx)(o.h2,{id:"device-uart-logging",children:"Device Uart Logging"}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool - Automatic Connection",img:i(6001),style:{width:"60%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsx)(o.p,{children:"All of our Devices provide extensive logging information over the CONFIG port. When you are connected to a Device in the\nLobaro Maintenance Tool, you can read the log messages in the LOGS Tab. This feature is helpful if you try to find out\nthe cause of problems you experience. You can also find out a lot of information about your Device, for example you can\nfind the parameters used to connect your LoRaWAN Devices to your Network Server (DevEUI, AppKey, etc.)."}),"\n",(0,n.jsx)(o.p,{children:"All messages are displayed in the big text area, each line is prefixed by the time it is received (using the clock of\nyour computer). You can use Clear Log to start again with an empty text area. The cleared messages will still be\navailable through the log files that the tool creates."}),"\n",(0,n.jsx)(o.p,{children:"When starting, our devices print out their current configuration parameter values. Most Devices also have a power on\ntest, that checks if attached sensors can be read successfully. Any Problems that the Device detects will be printed to\nthe log."}),"\n",(0,n.jsx)(o.h3,{id:"restarting",children:"Restarting"}),"\n",(0,n.jsx)(o.p,{children:"The LOGS Tab also contains a button Run (reset). This button triggers a reboot of the attached device. This can be\nuseful when you start working with your device or if you try to fix issues with connected sensors."}),"\n",(0,n.jsx)(o.h3,{id:"log-files",children:"Log-Files"}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool - Automatic Connection",img:i(4084),style:{width:"25%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsxs)(o.p,{children:["The logs are also written to files on your computer. Every time you start the Lobaro Maintenance Tool, a new log file is\ncreated. When you press the button ",(0,n.jsx)(o.strong,{children:"Show Log Files"})," in the upper right location of the tool, a file browser is opened\nat the location where log files are kept."]}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:["Windows: ",(0,n.jsx)(o.code,{children:"%homepath%\\.lobaro\\logs"})]}),"\n",(0,n.jsxs)(o.li,{children:["Linux / Mac: ",(0,n.jsx)(o.code,{children:"~/.lobaro/logs"})]}),"\n",(0,n.jsxs)(o.li,{children:["File Name: ",(0,n.jsx)(o.code,{children:"-uart-log.txt"})]}),"\n"]}),"\n",(0,n.jsx)(o.h3,{id:"sending-to-the-device",children:"Sending to the device"}),"\n",(0,n.jsx)(o.p,{children:"Below the text area is an input field Send via UART. Text entered here (and confirmed with Enter) will be sent to the\nconnected Device via UART. Some of our Devices use this feature, for example the LoRaWAN Modbus Bridge for its\ninteractive Dialog Mode."}),"\n",(0,n.jsx)(o.h3,{id:"log-parsing",children:"Log parsing"}),"\n",(0,n.jsx)(o.p,{children:"If you need to parse the log messages of one of our Devices with your own tools, you can connect to it without the\nMaintenance Tool by using any serial UART reader. You can find the UART parameters above. Take care on the additional\ncontrol lines (DTR, RTS) to have the right state to keep the device run the firmware."}),"\n",(0,n.jsx)(o.h2,{id:"fwupdate",children:"Device Firmwareupdate"}),"\n",(0,n.jsx)(o.p,{children:"Our devices are shipped ready to use with firmware installed on them, so normally you do not need to install firmware\nyourself. However, over time we sometimes add new features to our devices or fix bugs that come up over time. If you\nwant to use those improvements for devices all ready shipped to you, you can update the firmware yourself."}),"\n",(0,n.jsx)(o.p,{children:"This page describes how you install firmware on devices that you have physical access to. This can be done for most of\nour devices, those using LoRaWAN and those using NB-IoT/LTE-M."}),"\n",(0,n.jsxs)(o.p,{children:["Our NB-IoT/LTE-M devices also support installing firmware over the air, without physical access. Check the ",(0,n.jsx)(o.a,{href:"/cloud",children:"platform\ndocumentation"})," for details."]}),"\n",(0,n.jsx)(o.h3,{id:"getting-the-firmware",children:"Getting the firmware"}),"\n",(0,n.jsx)(o.p,{children:"You will need the Firmware you want to install to your device as a file on your computer."}),"\n",(0,n.jsxs)(o.p,{children:["You can get the latest firmware files from this documentation on the firmware subpage for your specific Lobaro product.\nThe files are\nin a format called Hex and are therefore also called Hex-File. The filename always starts with app- and contains the\nversion number as well as a short description of its function and the hardware it is used for. So, for example,\n",(0,n.jsx)(o.code,{children:"app-nrf9160-wmbus-TZ2-0.3.1-mcuboot-slot0.hex"})," contains firmware for our wMBus-Gateway on NB-IoT-Hardware (nrf9160) in\nversion 0.3.1."]}),"\n",(0,n.jsx)(o.h3,{id:"installing-new-firmware",children:"Installing new firmware"}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool - Flash new firmware",img:i(7768),style:{width:"60%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsxs)(o.p,{children:["Make sure your Device is successfully attached to your computer and the Maintenance Tool is connected, as described\nabove. In the Tab ",(0,n.jsx)(o.strong,{children:"FIRMWARE"})," you can select the Firmware file you want to install using the button ",(0,n.jsx)(o.em,{children:"Select Hex File"}),".\nThis\nwill open a file selection dialog, where you can select the hex-file with the Firmware you want to install to your\nDevice. To start installing you need to press ",(0,n.jsx)(o.em,{children:"Flash Hex File"}),". The upload will take several seconds; progress will be\ndisplayed by the blue progress bar. It turns green on successful completion. You can verify the installation succeeded\nand your Device is now running the correct version by checking the ",(0,n.jsx)(o.strong,{children:"LOGS"})," Tab."]}),"\n",(0,n.jsx)(o.p,{children:"You should also take a look at the Configuration Parameters. When an update adds new features, there might be new\nConfiguration Parameters to set, or some existing Parameters might work differently. Check the Firmware's Changelog to\nsee what changed between versions and what you have to look out for, for your individual Firmware update."})]})}function h(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,o,i)=>{"use strict";i.d(o,{R:()=>s,x:()=>r});var n=i(6540);const t={},a=n.createContext(t);function s(e){const o=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function r(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),n.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5750849.c57d68f4.js b/assets/js/a5750849.c57d68f4.js new file mode 100644 index 00000000..3c2dcd6e --- /dev/null +++ b/assets/js/a5750849.c57d68f4.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1148],{5095:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/Lobaro_Tool_ConfigFeature.d276502.1224.png 1224w",images:[{path:i.p+"assets/images/ideal-img/Lobaro_Tool_ConfigFeature.d276502.1224.png",width:1224,height:730}],src:i.p+"assets/images/ideal-img/Lobaro_Tool_ConfigFeature.d276502.1224.png",toString:function(){return i.p+"assets/images/ideal-img/Lobaro_Tool_ConfigFeature.d276502.1224.png"},placeholder:void 0,width:1224,height:730},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgklEQVR4nC2MQQ7CMAwE8/8HwoEi7kW0SZTG9q6doCDmNHOZdOacSzZVACDhvgSUdtX3nuq+15KP2i6RXks/PqYipi3n8nyksm3a2iWq9OP1Ou83cl0IwJmMHhEiMiIM4BjuPuckqaoJZu7svUfEiJjjD0kzS4ABZqbu68cf7uQq+wK1c63N5QE9AAAAAABJRU5ErkJggg=="}},7768:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/tool-config-flash.ea677cb.1228.png 1228w",images:[{path:i.p+"assets/images/ideal-img/tool-config-flash.ea677cb.1228.png",width:1228,height:605}],src:i.p+"assets/images/ideal-img/tool-config-flash.ea677cb.1228.png",toString:function(){return i.p+"assets/images/ideal-img/tool-config-flash.ea677cb.1228.png"},placeholder:void 0,width:1228,height:605},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgElEQVR4nG3JUQqCQBhF4dl/EASllUKtooeIIGgPtQIfzTSb/446J5AgAi983Ifjrpczp+OBzXpJnqXsd/kozxKybUK6WpDMZ9GpbQkSQ4xMLUp0RYEr7zeaR0VZv6ie1ahparx/j8w8FgxnZgxxwJshGfp+CPqR4STR991/mPABrsC4zAIkdt8AAAAASUVORK5CYII="}},2019:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/tool-config-loaded.ecd8f96.1248.png 1248w",images:[{path:i.p+"assets/images/ideal-img/tool-config-loaded.ecd8f96.1248.png",width:1248,height:643}],src:i.p+"assets/images/ideal-img/tool-config-loaded.ecd8f96.1248.png",toString:function(){return i.p+"assets/images/ideal-img/tool-config-loaded.ecd8f96.1248.png"},placeholder:void 0,width:1248,height:643},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAArklEQVR4nB2KwUoDQRBE55+j4q6yCIkHf2Bv6tEf8KYgcT0mUSEEwXUOih4lGNLuzHTPC5mCRz2Kcpc3V7TXLcfjivr8hObirFBNaqpxzUFzyNHpKLupf+HBv3LXPzP9XPLYL+je5zzt/WvF/duMrrvFSf9B2mwRSViG9P3D4D0l2UrZZo0T2RJjZAgDakoy5T8MJNWyS4zEv19cCAHVhIhgOWNm5ZD3rkqIEUuJHXKrsKwTcDxUAAAAAElFTkSuQmCC"}},6001:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/tool-config-logs.405ab33.1458.png 1458w",images:[{path:i.p+"assets/images/ideal-img/tool-config-logs.405ab33.1458.png",width:1458,height:1002}],src:i.p+"assets/images/ideal-img/tool-config-logs.405ab33.1458.png",toString:function(){return i.p+"assets/images/ideal-img/tool-config-logs.405ab33.1458.png"},placeholder:void 0,width:1458,height:1002},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxUlEQVR4nGWOu07EMAAE/d8UILhAwnEtDaKmgW86KYnz1In4lTh2yCBMhVhptMVOseLj/Y3Xl2fy+1uORcbp+MDpKeexyCjyO7LDDYfrq13E2bFtG/u+s/M/XzESxgGhzmdW7/mcFJM2KG3QRmOdwznLPDuW4BEhRrYYaaRESklVVanbtk1M04Q1BhFDYF09UtbUdZ3Esixpmoau635FZxExBha/pKHve4ZhQCmFtRZjTOofRAgr3i8MreQyjmitmdO/v3wDWVgAL2Yh6GYAAAAASUVORK5CYII="}},553:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/tool-connect-auto.bec75f4.1224.png 1224w",images:[{path:i.p+"assets/images/ideal-img/tool-connect-auto.bec75f4.1224.png",width:1224,height:605}],src:i.p+"assets/images/ideal-img/tool-connect-auto.bec75f4.1224.png",toString:function(){return i.p+"assets/images/ideal-img/tool-connect-auto.bec75f4.1224.png"},placeholder:void 0,width:1224,height:605},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAlklEQVR4nD2NywpBURhG90OT+yUPYaBOyfuIgQxESQYGctrnwn/hLB1ksPpaa/KFxTwhmU0Z9luMBm0m496H2vvdJp12g26nUYXqKajcKYocM8Hd8Kfjpqg7ZYzEw56wWq7JzjtimlKoE09H0u0GVUFq7iWSZ4Tr5YLlN0wfqBlSFkgWMVNM5btuhOr1ooJv+MX6+u8/3nV9s9SCuj06AAAAAElFTkSuQmCC"}},4084:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/tool-show-logfiles.7348375.321.png 321w",images:[{path:i.p+"assets/images/ideal-img/tool-show-logfiles.7348375.321.png",width:321,height:95}],src:i.p+"assets/images/ideal-img/tool-show-logfiles.7348375.321.png",toString:function(){return i.p+"assets/images/ideal-img/tool-show-logfiles.7348375.321.png"},placeholder:void 0,width:321,height:95},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAW0lEQVR4nB3CQQpAUBQF0L82K5AFWIip/ZgoE2NF5lYg+aLeu+++LzNxOsEAty//BkAVIgaoSCAQ9T4knZouf7DHuSjHLF+qGkAgaXT3RLqnm6pb169NG4fJyBfVF0/moQP9/AAAAABJRU5ErkJggg=="}},2640:(e,o,i)=>{"use strict";i.r(o),i.d(o,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var n=i(4848),t=i(8453);const a={sidebar_position:2,title:"Lobaro Config Tool"},s="Lobaro Config Tool",r={id:"configuration/lobaro-config-tool",title:"Lobaro Config Tool",description:"The Lobaro Config Tool (a.k.a. Lobaro Maintenance Tool) can be used to configure and diagnose Lobaro devices locally using a PC and our special",source:"@site/docs/configuration/lobaro-config-tool.md",sourceDirName:"configuration",slug:"/configuration/lobaro-config-tool",permalink:"/iot/configuration/lobaro-config-tool",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/lobaro-config-tool.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Lobaro Config Tool"},sidebar:"allDocSidebar",previous:{title:"Lobaro USB Config Adapter",permalink:"/iot/configuration/usb-config-adapter"},next:{title:"MBUS Reception Filtering",permalink:"/iot/configuration/meter-reception-filter-config"}},l={},c=[{value:"Download",id:"download",level:2},{value:"System Requirements",id:"system-requirements",level:2},{value:"Operating systems",id:"operating-systems",level:3},{value:"Default UART config",id:"default-uart-config",level:3},{value:"Installation",id:"installation",level:2},{value:"Windows",id:"windows",level:3},{value:"macOS / Linux",id:"macos--linux",level:3},{value:"Connection Setup",id:"connection-setup",level:2},{value:"Device Configuration",id:"device-configuration",level:2},{value:"Device Uart Logging",id:"device-uart-logging",level:2},{value:"Restarting",id:"restarting",level:3},{value:"Log-Files",id:"log-files",level:3},{value:"Sending to the device",id:"sending-to-the-device",level:3},{value:"Log parsing",id:"log-parsing",level:3},{value:"Device Firmwareupdate",id:"fwupdate",level:2},{value:"Getting the firmware",id:"getting-the-firmware",level:3},{value:"Installing new firmware",id:"installing-new-firmware",level:3}];function d(e){const o={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components},{Image:a}=o;return a||function(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"lobaro-config-tool",children:"Lobaro Config Tool"}),"\n",(0,n.jsxs)(o.p,{children:["The Lobaro Config Tool (a.k.a. Lobaro Maintenance Tool) can be used to configure and diagnose Lobaro devices locally using a PC and our special\n",(0,n.jsx)(o.a,{href:"/iot/configuration/usb-config-adapter",children:"USB configuration adapter"}),". It's available as free ",(0,n.jsx)(o.a,{href:"#download",children:"download"})," for all common\noperating systems."]}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool",img:i(5095),style:{width:"60%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,n.jsx)(o.h2,{id:"download",children:"Download"}),"\n",(0,n.jsxs)(o.p,{children:["See: ",(0,n.jsx)(o.a,{href:"https://github.com/lobaro/flash-tool-release/releases",children:"https://github.com/lobaro/flash-tool-release/releases"})]}),"\n",(0,n.jsx)(o.admonition,{title:"Select correct Download for your OS",type:"tip",children:(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:["Windows: ",(0,n.jsx)(o.code,{children:"...windows_x86_64.zip"})]}),"\n",(0,n.jsxs)(o.li,{children:["Linux: ",(0,n.jsx)(o.code,{children:"...linux_x86_64.zip"})]}),"\n",(0,n.jsxs)(o.li,{children:["macOS (ARM): ",(0,n.jsx)(o.code,{children:"...mac_arm64.zip"})]}),"\n",(0,n.jsxs)(o.li,{children:["macOS (INTEL): ",(0,n.jsx)(o.code,{children:"...mac_x86_64.zip"})]}),"\n"]})}),"\n",(0,n.jsx)(o.h2,{id:"system-requirements",children:"System Requirements"}),"\n",(0,n.jsx)(o.p,{children:"The tools runs as local webserver and the user frontend is accessed using a standard browser."}),"\n",(0,n.jsx)(o.h3,{id:"operating-systems",children:"Operating systems"}),"\n",(0,n.jsx)(o.p,{children:"The tools is available for the following operating systems:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:"macOS"}),"\n",(0,n.jsx)(o.li,{children:"Windows 7/10/11"}),"\n",(0,n.jsx)(o.li,{children:"Linux"}),"\n"]}),"\n",(0,n.jsx)(o.h3,{id:"default-uart-config",children:"Default UART config"}),"\n",(0,n.jsx)(o.p,{children:"The default uart configuration is:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:"115200 Baud"}),"\n",(0,n.jsx)(o.li,{children:"8 data bits"}),"\n",(0,n.jsx)(o.li,{children:"Even parity"}),"\n",(0,n.jsx)(o.li,{children:"1 stop bot"}),"\n"]}),"\n",(0,n.jsxs)(o.p,{children:["This UART configuration is used by ",(0,n.jsx)(o.strong,{children:"all Lobaro devices"}),' on the "Config" port.']}),"\n",(0,n.jsx)(o.h2,{id:"installation",children:"Installation"}),"\n",(0,n.jsx)(o.h3,{id:"windows",children:"Windows"}),"\n",(0,n.jsx)(o.p,{children:'After downloading unzip and simply start the "lobaro-tool.exe" with double click.'}),"\n",(0,n.jsx)(o.admonition,{type:"info",children:(0,n.jsx)(o.p,{children:"Windows might show up a security warning and ask you to proceed anyway. This behavior is normal."})}),"\n",(0,n.jsx)(o.h3,{id:"macos--linux",children:"macOS / Linux"}),"\n",(0,n.jsx)(o.p,{children:'After downloading and unzip the "lobaro-tool" file, e.g. to a directory "lobaro" in your home path. Then make the tool\nfile executable:'}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:'language-bash"',children:"cd ~/lobaro\nchmod +x lobaro-tool\n./lobaro-tool\n"})}),"\n",(0,n.jsx)(o.h2,{id:"connection-setup",children:"Connection Setup"}),"\n",(0,n.jsxs)(o.p,{children:["Connect your Lobaro Device using the ",(0,n.jsx)(o.a,{href:"/iot/configuration/usb-config-adapter",children:"Lobaro Config Adapter"})," to the USB-port of your computer."]}),"\n",(0,n.jsx)(o.p,{children:"When your device is successfully attached to your computer, you can build a connection with the Lobaro Maintenance Tool."}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool - Automatic Connection",img:i(553),style:{width:"60%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsxs)(o.p,{children:["Under Hardware Connection select ",(0,n.jsx)(o.em,{children:"auto"})," and click ",(0,n.jsx)(o.em,{children:"Connect"}),", as seen in the screenshot above. If you know to which port\nthe\ndevice is connected to your computer (either COM or ttyUSB), you can alternatively select it explicitly instead of using\nauto."]}),"\n",(0,n.jsx)(o.h2,{id:"device-configuration",children:"Device Configuration"}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool - Automatic Connection",img:i(2019),style:{width:"60%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsxs)(o.p,{children:["When you are connected to a Lobaro Device, you can use the Tab named ",(0,n.jsx)(o.strong,{children:"CONFIGURATION"})," to read and change the\nconfiguration\nparameters of the Device. You can read out the current configuration from the device by pressing the Reload Config\nbutton (reading takes a few seconds)."]}),"\n",(0,n.jsxs)(o.admonition,{title:"Automatic device reboot",type:"warning",children:[(0,n.jsx)(o.p,{children:"Every time you use one of the buttons Reload Config. Write to Device, or Restore Default, the connected device will be\nrebooted! Also keep in mind that the operations triggered by pressing the buttons include communication with the device\nover a serial bus and they will take a few seconds."}),(0,n.jsx)(o.p,{children:"To avoid errors, please do not press those buttons repeatedly!"})]}),"\n",(0,n.jsxs)(o.p,{children:["When the configuration is read, you can alter the parameters by clicking on the pencil icon on the right. Values that\nyou changed will printed in bold font. When you have adjusted all values you want to change, you ",(0,n.jsx)(o.strong,{children:"must"})," press\n",(0,n.jsx)(o.em,{children:"Write to Device"})," to actually change anything in the device internal memory! Writing the values will also reboot the\ndevice."]}),"\n",(0,n.jsxs)(o.p,{children:["The Button ",(0,n.jsx)(o.em,{children:"Restore Default"})," will reset all config parameters of the connected Device to their internal default values.\nThe device will reboot, and the listed values of the configuration in the Lobaro Maintenance Tool well be updated."]}),"\n",(0,n.jsx)(o.admonition,{title:"Always reload the config before changing it!",type:"danger",children:(0,n.jsxs)(o.p,{children:["When you are working with multiple devices, make sure that your always press Reload Config after attaching a new device\nbefore you start updating values. If you fail to do so, you might accidentally transfer values from the previously\nattached device to the newly connected. This is especially a problem when working with LoRaWAN sensors, as you will copy\nthe DevEUI from one device to the other! This can be reverted by using the ",(0,n.jsx)(o.em,{children:"Restore Default"})," functionality."]})}),"\n",(0,n.jsxs)(o.p,{children:["You can watch the rebooting of the Device and check the altered configuration parameters by locking in the ",(0,n.jsx)(o.strong,{children:"LOGS"})," Tab."]}),"\n",(0,n.jsx)(o.h2,{id:"device-uart-logging",children:"Device Uart Logging"}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool - Automatic Connection",img:i(6001),style:{width:"60%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsx)(o.p,{children:"All of our Devices provide extensive logging information over the CONFIG port. When you are connected to a Device in the\nLobaro Maintenance Tool, you can read the log messages in the LOGS Tab. This feature is helpful if you try to find out\nthe cause of problems you experience. You can also find out a lot of information about your Device, for example you can\nfind the parameters used to connect your LoRaWAN Devices to your Network Server (DevEUI, AppKey, etc.)."}),"\n",(0,n.jsx)(o.p,{children:"All messages are displayed in the big text area, each line is prefixed by the time it is received (using the clock of\nyour computer). You can use Clear Log to start again with an empty text area. The cleared messages will still be\navailable through the log files that the tool creates."}),"\n",(0,n.jsx)(o.p,{children:"When starting, our devices print out their current configuration parameter values. Most Devices also have a power on\ntest, that checks if attached sensors can be read successfully. Any Problems that the Device detects will be printed to\nthe log."}),"\n",(0,n.jsx)(o.h3,{id:"restarting",children:"Restarting"}),"\n",(0,n.jsx)(o.p,{children:"The LOGS Tab also contains a button Run (reset). This button triggers a reboot of the attached device. This can be\nuseful when you start working with your device or if you try to fix issues with connected sensors."}),"\n",(0,n.jsx)(o.h3,{id:"log-files",children:"Log-Files"}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool - Automatic Connection",img:i(4084),style:{width:"25%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsxs)(o.p,{children:["The logs are also written to files on your computer. Every time you start the Lobaro Maintenance Tool, a new log file is\ncreated. When you press the button ",(0,n.jsx)(o.strong,{children:"Show Log Files"})," in the upper right location of the tool, a file browser is opened\nat the location where log files are kept."]}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:["Windows: ",(0,n.jsx)(o.code,{children:"%homepath%\\.lobaro\\logs"})]}),"\n",(0,n.jsxs)(o.li,{children:["Linux / Mac: ",(0,n.jsx)(o.code,{children:"~/.lobaro/logs"})]}),"\n",(0,n.jsxs)(o.li,{children:["File Name: ",(0,n.jsx)(o.code,{children:"-uart-log.txt"})]}),"\n"]}),"\n",(0,n.jsx)(o.h3,{id:"sending-to-the-device",children:"Sending to the device"}),"\n",(0,n.jsx)(o.p,{children:"Below the text area is an input field Send via UART. Text entered here (and confirmed with Enter) will be sent to the\nconnected Device via UART. Some of our Devices use this feature, for example the LoRaWAN Modbus Bridge for its\ninteractive Dialog Mode."}),"\n",(0,n.jsx)(o.h3,{id:"log-parsing",children:"Log parsing"}),"\n",(0,n.jsx)(o.p,{children:"If you need to parse the log messages of one of our Devices with your own tools, you can connect to it without the\nMaintenance Tool by using any serial UART reader. You can find the UART parameters above. Take care on the additional\ncontrol lines (DTR, RTS) to have the right state to keep the device run the firmware."}),"\n",(0,n.jsx)(o.h2,{id:"fwupdate",children:"Device Firmwareupdate"}),"\n",(0,n.jsx)(o.p,{children:"Our devices are shipped ready to use with firmware installed on them, so normally you do not need to install firmware\nyourself. However, over time we sometimes add new features to our devices or fix bugs that come up over time. If you\nwant to use those improvements for devices all ready shipped to you, you can update the firmware yourself."}),"\n",(0,n.jsx)(o.p,{children:"This page describes how you install firmware on devices that you have physical access to. This can be done for most of\nour devices, those using LoRaWAN and those using NB-IoT/LTE-M."}),"\n",(0,n.jsxs)(o.p,{children:["Our NB-IoT/LTE-M devices also support installing firmware over the air, without physical access. Check the ",(0,n.jsx)(o.a,{href:"/cloud",children:"platform\ndocumentation"})," for details."]}),"\n",(0,n.jsx)(o.h3,{id:"getting-the-firmware",children:"Getting the firmware"}),"\n",(0,n.jsx)(o.p,{children:"You will need the Firmware you want to install to your device as a file on your computer."}),"\n",(0,n.jsxs)(o.p,{children:["You can get the latest firmware files from this documentation on the firmware subpage for your specific Lobaro product.\nThe files are\nin a format called Hex and are therefore also called Hex-File. The filename always starts with app- and contains the\nversion number as well as a short description of its function and the hardware it is used for. So, for example,\n",(0,n.jsx)(o.code,{children:"app-nrf9160-wmbus-TZ2-0.3.1-mcuboot-slot0.hex"})," contains firmware for our wMBus-Gateway on NB-IoT-Hardware (nrf9160) in\nversion 0.3.1."]}),"\n",(0,n.jsx)(o.h3,{id:"installing-new-firmware",children:"Installing new firmware"}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool - Flash new firmware",img:i(7768),style:{width:"60%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsxs)(o.p,{children:["Make sure your Device is successfully attached to your computer and the Maintenance Tool is connected, as described\nabove. In the Tab ",(0,n.jsx)(o.strong,{children:"FIRMWARE"})," you can select the Firmware file you want to install using the button ",(0,n.jsx)(o.em,{children:"Select Hex File"}),".\nThis\nwill open a file selection dialog, where you can select the hex-file with the Firmware you want to install to your\nDevice. To start installing you need to press ",(0,n.jsx)(o.em,{children:"Flash Hex File"}),". The upload will take several seconds; progress will be\ndisplayed by the blue progress bar. It turns green on successful completion. You can verify the installation succeeded\nand your Device is now running the correct version by checking the ",(0,n.jsx)(o.strong,{children:"LOGS"})," Tab."]}),"\n",(0,n.jsx)(o.p,{children:"You should also take a look at the Configuration Parameters. When an update adds new features, there might be new\nConfiguration Parameters to set, or some existing Parameters might work differently. Check the Firmware's Changelog to\nsee what changed between versions and what you have to look out for, for your individual Firmware update."})]})}function h(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,o,i)=>{"use strict";i.d(o,{R:()=>s,x:()=>r});var n=i(6540);const t={},a=n.createContext(t);function s(e){const o=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function r(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),n.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5b914f3.420cdf37.js b/assets/js/a5b914f3.420cdf37.js deleted file mode 100644 index 6fbf5bbc..00000000 --- a/assets/js/a5b914f3.420cdf37.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7244],{8045:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/8000005_Lobaro_Configuration Adapter.baf7698.800.jpg 800w",images:[{path:i.p+"assets/images/ideal-img/8000005_Lobaro_Configuration Adapter.baf7698.800.jpg",width:800,height:800}],src:i.p+"assets/images/ideal-img/8000005_Lobaro_Configuration Adapter.baf7698.800.jpg",toString:function(){return i.p+"assets/images/ideal-img/8000005_Lobaro_Configuration Adapter.baf7698.800.jpg"},placeholder:void 0,width:800,height:800},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABAYH/8QAIBAAAgEEAQUAAAAAAAAAAAAAAQIDAAQFESESFDFCUf/EABQBAQAAAAAAAAAAAAAAAAAAAAH/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDcs2mSGQyLxQX/AHiuJba6VtQRQqqkrrq5JIcEFdkt8AIs7aRpraKVlKM6Bip9SR4omWRJHskkVXU3A2GGweCafSH/2Q=="}},4962:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.800dc32.1600.jpg 1600w,"+i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.961f5b7.1885.jpg 1885w",images:[{path:i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.800dc32.1600.jpg",width:1600,height:187},{path:i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.961f5b7.1885.jpg",width:1885,height:220}],src:i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.800dc32.1600.jpg",toString:function(){return i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.800dc32.1600.jpg"},placeholder:void 0,width:1600,height:187},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQH/8QAHRAAAQIHAAAAAAAAAAAAAAAAAAECBgcyNnFysv/EABQBAQAAAAAAAAAAAAAAAAAAAAH/xAAWEQEBAQAAAAAAAAAAAAAAAAAAAUH/2gAMAwEAAhEDEQA/AJ5v3DEWicNM5fW7IA3BH//Z"}},9356:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/adapter1low.9350fd9.469.jpg 469w",images:[{path:i.p+"assets/images/ideal-img/adapter1low.9350fd9.469.jpg",width:469,height:395}],src:i.p+"assets/images/ideal-img/adapter1low.9350fd9.469.jpg",toString:function(){return i.p+"assets/images/ideal-img/adapter1low.9350fd9.469.jpg"},placeholder:void 0,width:469,height:395},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAIAAoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAhEAACAQMDBQAAAAAAAAAAAAABAgUAAwQGERQSEzFBwf/EABUBAQEAAAAAAAAAAAAAAAAAAAAC/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQACEf/aAAwDAQACEQMRAD8Ar+LES+oJuUlcaS42LynxBjtuens3GQuCD5O2/wAqkW1K21VmLEAAk+6UpykyCt//2Q=="}},3938:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/config-adapter-schematic.320582c.1399.png 1399w",images:[{path:i.p+"assets/images/ideal-img/config-adapter-schematic.320582c.1399.png",width:1399,height:525}],src:i.p+"assets/images/ideal-img/config-adapter-schematic.320582c.1399.png",toString:function(){return i.p+"assets/images/ideal-img/config-adapter-schematic.320582c.1399.png"},placeholder:void 0,width:1399,height:525},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdklEQVR4nDWNSwoCMRAFc/9jufQQggyioCTOdD7dk6RLHPEtiqI2LwCMObDeWdOCbHf6mDh+9P/CF85kVyPnSN5u2L4j7wW1zCoJrU9C7x3VSkwRkQsiJ6o1HtczrcTDsyRCKwXVRtWG6UazF+6ONWGO37U7fADQ+5tBzCyAbwAAAABJRU5ErkJggg=="}},2608:(e,o,i)=>{"use strict";i.r(o),i.d(o,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>a,metadata:()=>A,toc:()=>d});var t=i(4848),n=i(8453);const a={sidebar_position:1,displayed_sidebar:"configurationSidebar",title:"Lobaro USB Config Adapter"},r="Lobaro USB Config Adapter",A={id:"configuration/usb-config-adapter",title:"Lobaro USB Config Adapter",description:"The Lobaro USB configuration adapters connects the configuration serial uart of our devices to a PC. It is used for:",source:"@site/docs/configuration/usb-config-adapter.md",sourceDirName:"configuration",slug:"/configuration/usb-config-adapter",permalink:"/iot/configuration/usb-config-adapter",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/usb-config-adapter.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,displayed_sidebar:"configurationSidebar",title:"Lobaro USB Config Adapter"},sidebar:"configurationSidebar",previous:{title:"Overview",permalink:"/iot/configuration/"},next:{title:"Lobaro Config Tool",permalink:"/iot/configuration/lobaro-config-tool"}},s={},d=[{value:"Adapter V1",id:"adapter-v1",level:2},{value:"Order-Code",id:"order-code",level:3},{value:"Installation",id:"installation",level:3},{value:"Physical connection",id:"physical-connection",level:3},{value:"Schematic",id:"schematic",level:3},{value:"Connector Type",id:"connector-type",level:3},{value:"Control Lines",id:"control-lines",level:3},{value:"DTR control line",id:"dtr-control-line",level:4},{value:"RTS control line",id:"rts-control-line",level:4},{value:"Adapter V2",id:"adapter-v2",level:2}];function l(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components},{Image:a}=o;return a||function(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"lobaro-usb-config-adapter",children:"Lobaro USB Config Adapter"}),"\n",(0,t.jsx)(o.p,{children:"The Lobaro USB configuration adapters connects the configuration serial uart of our devices to a PC. It is used for:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Sensor initial configuration, e.g. network parameters like LTE APN point"}),"\n",(0,t.jsx)(o.li,{children:"Viewing firmware log/debug diagnostic output"}),"\n",(0,t.jsx)(o.li,{children:"Firmware updates"}),"\n",(0,t.jsx)(o.li,{children:"Powering some of our devices (Boot and Reset must be disconnected to use as USB power supply)"}),"\n",(0,t.jsxs)(o.li,{children:["using our free ",(0,t.jsx)(o.a,{href:"/iot/configuration/lobaro-config-tool",children:"Lobaro Maintenance Tool"})," PC software."]}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"adapter-v1",children:"Adapter V1"}),"\n",(0,t.jsx)(a,{alt:"Lobaro USB Configuration Adapter V1",img:i(8045),style:{width:"30%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsx)(o.h3,{id:"order-code",children:"Order-Code"}),"\n",(0,t.jsxs)(o.p,{children:["The configuration adapter including a 1 m USB cable can be ordered using its article number: ",(0,t.jsx)(o.code,{children:"#8000005"}),"."]}),"\n",(0,t.jsx)(o.h3,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(o.p,{children:["The CP2102 uart serial USB driver ",(0,t.jsx)(o.strong,{children:"must"})," be installed, it can be\ndownloaded at\nthe ",(0,t.jsx)(o.a,{href:"https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads",children:"Silicon Labs Homepage"}),"."]}),"\n",(0,t.jsx)(o.admonition,{title:"Download",type:"tip",children:(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"CP210x_Universal_Windows_Driver.zip for Windows 11+"}),"\n",(0,t.jsx)(o.li,{children:"CP210x Windows Drivers v6.7.6 for Windows 10 and earlier"}),"\n"]})}),"\n",(0,t.jsx)(o.h3,{id:"physical-connection",children:"Physical connection"}),"\n",(0,t.jsx)(a,{alt:"Connection example lobaro usb configuration adaptr",img:i(9356),style:{width:"40%",paddingTop:"10px",paddingBottom:"20px"}}),"\n",(0,t.jsx)(o.p,{children:"Connect your Lobaro Device to the USB-port of your computer using the Lobaro Config Adapter. The 6-pin connector must be\nplugged into the white rectangular socket on the device that is labeled with the word CONFIG. The location of the socket\nis dependent on the specific device and hardware version you are trying to attach. See the hardware specific product\ndescription for the individual connector location."}),"\n",(0,t.jsx)(o.admonition,{title:"Device power supply over USB",type:"note",children:(0,t.jsx)(o.p,{children:"Some devices can be powered by the 3.3V the config adapter can provide out of the USB Port. Other devices, mostly the\nNB-IoT/LTE-M enabled cellular IoT boards or the need their normal power supply connected as well. If in doubt, just make\nsure you have the device powered!"})}),"\n",(0,t.jsx)(o.h3,{id:"schematic",children:"Schematic"}),"\n",(0,t.jsx)(a,{alt:"Schematic Lobaro USB Configuration Adapter V1",img:i(3938),style:{width:"100%",paddingTop:"10px",paddingBottom:"20px"}}),"\n",(0,t.jsx)(o.h3,{id:"connector-type",children:"Connector Type"}),"\n",(0,t.jsxs)(o.p,{children:["The USB adapter uses a six-wire ",(0,t.jsx)(o.a,{href:"https://www.jst-mfg.com/product/index.php?series=287",children:"JST-ZH series connector"})," for\nattaching to Lobaro hardware at the config connector."]}),"\n",(0,t.jsx)(a,{alt:"Lobaro USB Configuration Adapter V1",img:i(4962),style:{width:"90%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsx)(o.h3,{id:"control-lines",children:"Control Lines"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Boot0 of Lobaro sensors is connected to DTR line of the PC uart"}),"\n",(0,t.jsx)(o.li,{children:"Reset (active low) of Lobaro sensors is connected to RTS line of the PC uart"}),"\n"]}),"\n",(0,t.jsx)(o.admonition,{type:"info",children:(0,t.jsx)(o.p,{children:"Normally the handling of these uart control lines is done automatically by the Lobaro PC tool. When using an alternative\nuart terminal tool make sure you setup the RTS and DTR lines correctly or simply cut the DTR/RTS wires from\nthe USB adapter if the reset and/or bootloader control lines are not needed and you simply want to look at the devices\nlog output."})}),"\n",(0,t.jsx)(o.h4,{id:"dtr-control-line",children:"DTR control line"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Low / true => Run Firmware after Reset (Default since BOOT0 has internal pull-down)"}),"\n",(0,t.jsx)(o.li,{children:"High / false => Run Bootloader after Reset"}),"\n"]}),"\n",(0,t.jsx)(o.h4,{id:"rts-control-line",children:"RTS control line"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"High / false => Run Firmware / Bootloader (Default since RESET has internal pull-up)"}),"\n",(0,t.jsx)(o.li,{children:"Low / true => Chip in RESET mode (not running)"}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"adapter-v2",children:"Adapter V2"}),"\n",(0,t.jsx)(o.admonition,{type:"note",children:(0,t.jsx)(o.p,{children:"The usb adapter in version 2 will be available latest end of 2024."})})]})}function c(e={}){const{wrapper:o}={...(0,n.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,o,i)=>{"use strict";i.d(o,{R:()=>r,x:()=>A});var t=i(6540);const n={},a=t.createContext(n);function r(e){const o=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function A(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),t.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5b914f3.d2e9ac01.js b/assets/js/a5b914f3.d2e9ac01.js new file mode 100644 index 00000000..a48f16ca --- /dev/null +++ b/assets/js/a5b914f3.d2e9ac01.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7244],{8045:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/8000005_Lobaro_Configuration Adapter.baf7698.800.jpg 800w",images:[{path:i.p+"assets/images/ideal-img/8000005_Lobaro_Configuration Adapter.baf7698.800.jpg",width:800,height:800}],src:i.p+"assets/images/ideal-img/8000005_Lobaro_Configuration Adapter.baf7698.800.jpg",toString:function(){return i.p+"assets/images/ideal-img/8000005_Lobaro_Configuration Adapter.baf7698.800.jpg"},placeholder:void 0,width:800,height:800},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABAYH/8QAIBAAAgEEAQUAAAAAAAAAAAAAAQIDAAQFESESFDFCUf/EABQBAQAAAAAAAAAAAAAAAAAAAAH/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDcs2mSGQyLxQX/AHiuJba6VtQRQqqkrrq5JIcEFdkt8AIs7aRpraKVlKM6Bip9SR4omWRJHskkVXU3A2GGweCafSH/2Q=="}},4962:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.800dc32.1600.jpg 1600w,"+i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.961f5b7.1885.jpg 1885w",images:[{path:i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.800dc32.1600.jpg",width:1600,height:187},{path:i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.961f5b7.1885.jpg",width:1885,height:220}],src:i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.800dc32.1600.jpg",toString:function(){return i.p+"assets/images/ideal-img/Lobaro-KonfigAdapter-Anot.800dc32.1600.jpg"},placeholder:void 0,width:1600,height:187},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQH/8QAHRAAAQIHAAAAAAAAAAAAAAAAAAECBgcyNnFysv/EABQBAQAAAAAAAAAAAAAAAAAAAAH/xAAWEQEBAQAAAAAAAAAAAAAAAAAAAUH/2gAMAwEAAhEDEQA/AJ5v3DEWicNM5fW7IA3BH//Z"}},9356:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/adapter1low.9350fd9.469.jpg 469w",images:[{path:i.p+"assets/images/ideal-img/adapter1low.9350fd9.469.jpg",width:469,height:395}],src:i.p+"assets/images/ideal-img/adapter1low.9350fd9.469.jpg",toString:function(){return i.p+"assets/images/ideal-img/adapter1low.9350fd9.469.jpg"},placeholder:void 0,width:469,height:395},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAIAAoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAhEAACAQMDBQAAAAAAAAAAAAABAgUAAwQGERQSEzFBwf/EABUBAQEAAAAAAAAAAAAAAAAAAAAC/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQACEf/aAAwDAQACEQMRAD8Ar+LES+oJuUlcaS42LynxBjtuens3GQuCD5O2/wAqkW1K21VmLEAAk+6UpykyCt//2Q=="}},3938:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/config-adapter-schematic.320582c.1399.png 1399w",images:[{path:i.p+"assets/images/ideal-img/config-adapter-schematic.320582c.1399.png",width:1399,height:525}],src:i.p+"assets/images/ideal-img/config-adapter-schematic.320582c.1399.png",toString:function(){return i.p+"assets/images/ideal-img/config-adapter-schematic.320582c.1399.png"},placeholder:void 0,width:1399,height:525},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdklEQVR4nDWNSwoCMRAFc/9jufQQggyioCTOdD7dk6RLHPEtiqI2LwCMObDeWdOCbHf6mDh+9P/CF85kVyPnSN5u2L4j7wW1zCoJrU9C7x3VSkwRkQsiJ6o1HtczrcTDsyRCKwXVRtWG6UazF+6ONWGO37U7fADQ+5tBzCyAbwAAAABJRU5ErkJggg=="}},2608:(e,o,i)=>{"use strict";i.r(o),i.d(o,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>a,metadata:()=>A,toc:()=>d});var t=i(4848),n=i(8453);const a={sidebar_position:1,title:"Lobaro USB Config Adapter"},r="Lobaro USB Config Adapter",A={id:"configuration/usb-config-adapter",title:"Lobaro USB Config Adapter",description:"The Lobaro USB configuration adapters connects the configuration serial uart of our devices to a PC. It is used for:",source:"@site/docs/configuration/usb-config-adapter.md",sourceDirName:"configuration",slug:"/configuration/usb-config-adapter",permalink:"/iot/configuration/usb-config-adapter",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/usb-config-adapter.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"Lobaro USB Config Adapter"},sidebar:"allDocSidebar",previous:{title:"Overview",permalink:"/iot/configuration/"},next:{title:"Lobaro Config Tool",permalink:"/iot/configuration/lobaro-config-tool"}},s={},d=[{value:"Adapter V1",id:"adapter-v1",level:2},{value:"Order-Code",id:"order-code",level:3},{value:"Installation",id:"installation",level:3},{value:"Physical connection",id:"physical-connection",level:3},{value:"Schematic",id:"schematic",level:3},{value:"Connector Type",id:"connector-type",level:3},{value:"Control Lines",id:"control-lines",level:3},{value:"DTR control line",id:"dtr-control-line",level:4},{value:"RTS control line",id:"rts-control-line",level:4},{value:"Adapter V2",id:"adapter-v2",level:2}];function l(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components},{Image:a}=o;return a||function(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"lobaro-usb-config-adapter",children:"Lobaro USB Config Adapter"}),"\n",(0,t.jsx)(o.p,{children:"The Lobaro USB configuration adapters connects the configuration serial uart of our devices to a PC. It is used for:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Sensor initial configuration, e.g. network parameters like LTE APN point"}),"\n",(0,t.jsx)(o.li,{children:"Viewing firmware log/debug diagnostic output"}),"\n",(0,t.jsx)(o.li,{children:"Firmware updates"}),"\n",(0,t.jsx)(o.li,{children:"Powering some of our devices (Boot and Reset must be disconnected to use as USB power supply)"}),"\n",(0,t.jsxs)(o.li,{children:["using our free ",(0,t.jsx)(o.a,{href:"/iot/configuration/lobaro-config-tool",children:"Lobaro Maintenance Tool"})," PC software."]}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"adapter-v1",children:"Adapter V1"}),"\n",(0,t.jsx)(a,{alt:"Lobaro USB Configuration Adapter V1",img:i(8045),style:{width:"30%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsx)(o.h3,{id:"order-code",children:"Order-Code"}),"\n",(0,t.jsxs)(o.p,{children:["The configuration adapter including a 1 m USB cable can be ordered using its article number: ",(0,t.jsx)(o.code,{children:"#8000005"}),"."]}),"\n",(0,t.jsx)(o.h3,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(o.p,{children:["The CP2102 uart serial USB driver ",(0,t.jsx)(o.strong,{children:"must"})," be installed, it can be\ndownloaded at\nthe ",(0,t.jsx)(o.a,{href:"https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads",children:"Silicon Labs Homepage"}),"."]}),"\n",(0,t.jsx)(o.admonition,{title:"Download",type:"tip",children:(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"CP210x_Universal_Windows_Driver.zip for Windows 11+"}),"\n",(0,t.jsx)(o.li,{children:"CP210x Windows Drivers v6.7.6 for Windows 10 and earlier"}),"\n"]})}),"\n",(0,t.jsx)(o.h3,{id:"physical-connection",children:"Physical connection"}),"\n",(0,t.jsx)(a,{alt:"Connection example lobaro usb configuration adaptr",img:i(9356),style:{width:"40%",paddingTop:"10px",paddingBottom:"20px"}}),"\n",(0,t.jsx)(o.p,{children:"Connect your Lobaro Device to the USB-port of your computer using the Lobaro Config Adapter. The 6-pin connector must be\nplugged into the white rectangular socket on the device that is labeled with the word CONFIG. The location of the socket\nis dependent on the specific device and hardware version you are trying to attach. See the hardware specific product\ndescription for the individual connector location."}),"\n",(0,t.jsx)(o.admonition,{title:"Device power supply over USB",type:"note",children:(0,t.jsx)(o.p,{children:"Some devices can be powered by the 3.3V the config adapter can provide out of the USB Port. Other devices, mostly the\nNB-IoT/LTE-M enabled cellular IoT boards or the need their normal power supply connected as well. If in doubt, just make\nsure you have the device powered!"})}),"\n",(0,t.jsx)(o.h3,{id:"schematic",children:"Schematic"}),"\n",(0,t.jsx)(a,{alt:"Schematic Lobaro USB Configuration Adapter V1",img:i(3938),style:{width:"100%",paddingTop:"10px",paddingBottom:"20px"}}),"\n",(0,t.jsx)(o.h3,{id:"connector-type",children:"Connector Type"}),"\n",(0,t.jsxs)(o.p,{children:["The USB adapter uses a six-wire ",(0,t.jsx)(o.a,{href:"https://www.jst-mfg.com/product/index.php?series=287",children:"JST-ZH series connector"})," for\nattaching to Lobaro hardware at the config connector."]}),"\n",(0,t.jsx)(a,{alt:"Lobaro USB Configuration Adapter V1",img:i(4962),style:{width:"90%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,t.jsx)(o.h3,{id:"control-lines",children:"Control Lines"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Boot0 of Lobaro sensors is connected to DTR line of the PC uart"}),"\n",(0,t.jsx)(o.li,{children:"Reset (active low) of Lobaro sensors is connected to RTS line of the PC uart"}),"\n"]}),"\n",(0,t.jsx)(o.admonition,{type:"info",children:(0,t.jsx)(o.p,{children:"Normally the handling of these uart control lines is done automatically by the Lobaro PC tool. When using an alternative\nuart terminal tool make sure you setup the RTS and DTR lines correctly or simply cut the DTR/RTS wires from\nthe USB adapter if the reset and/or bootloader control lines are not needed and you simply want to look at the devices\nlog output."})}),"\n",(0,t.jsx)(o.h4,{id:"dtr-control-line",children:"DTR control line"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Low / true => Run Firmware after Reset (Default since BOOT0 has internal pull-down)"}),"\n",(0,t.jsx)(o.li,{children:"High / false => Run Bootloader after Reset"}),"\n"]}),"\n",(0,t.jsx)(o.h4,{id:"rts-control-line",children:"RTS control line"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"High / false => Run Firmware / Bootloader (Default since RESET has internal pull-up)"}),"\n",(0,t.jsx)(o.li,{children:"Low / true => Chip in RESET mode (not running)"}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"adapter-v2",children:"Adapter V2"}),"\n",(0,t.jsx)(o.admonition,{type:"note",children:(0,t.jsx)(o.p,{children:"The usb adapter in version 2 will be available latest end of 2024."})})]})}function c(e={}){const{wrapper:o}={...(0,n.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,o,i)=>{"use strict";i.d(o,{R:()=>r,x:()=>A});var t=i(6540);const n={},a=t.createContext(n);function r(e){const o=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function A(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),t.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5f952c8.1ed474b4.js b/assets/js/a5f952c8.1ed474b4.js deleted file mode 100644 index aa9934cc..00000000 --- a/assets/js/a5f952c8.1ed474b4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[802],{4100:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var t=n(4848),r=n(8453);const a={},i="Discontinued Gateways",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/index",title:"Discontinued Gateways",description:"These products have been discontinued and are no longer available for sale.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/index.md",tags:[],version:"current",frontMatter:{},sidebar:"productsSidebar",previous:{title:"Gateway Concentrator",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/"},next:{title:"LoRaWAN Bridge V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/"}},d={},c=[];function u(e){const s={a:"a",admonition:"admonition",h1:"h1",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"discontinued-gateways",children:"Discontinued Gateways"}),"\n",(0,t.jsx)(s.admonition,{type:"info",children:(0,t.jsx)(s.p,{children:"These products have been discontinued and are no longer available for sale."})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/",children:"LoRaWAN Bridge V2"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/",children:"NB-IoT Gateway V2"})}),"\n"]})]})}function l(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>o});var t=n(6540);const r={},a=t.createContext(r);function i(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5f952c8.fa3ae03b.js b/assets/js/a5f952c8.fa3ae03b.js new file mode 100644 index 00000000..a869265a --- /dev/null +++ b/assets/js/a5f952c8.fa3ae03b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[802],{4100:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var t=n(4848),r=n(8453);const a={},i="Discontinued Gateways",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/index",title:"Discontinued Gateways",description:"These products have been discontinued and are no longer available for sale.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/index.md",tags:[],version:"current",frontMatter:{},sidebar:"allDocSidebar",previous:{title:"Gateway Concentrator",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/"},next:{title:"LoRaWAN Bridge V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/"}},d={},c=[];function u(e){const s={a:"a",admonition:"admonition",h1:"h1",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"discontinued-gateways",children:"Discontinued Gateways"}),"\n",(0,t.jsx)(s.admonition,{type:"info",children:(0,t.jsx)(s.p,{children:"These products have been discontinued and are no longer available for sale."})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/",children:"LoRaWAN Bridge V2"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/",children:"NB-IoT Gateway V2"})}),"\n"]})]})}function l(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>o});var t=n(6540);const r={},a=t.createContext(r);function i(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a76cbaf7.6ee89287.js b/assets/js/a76cbaf7.6ee89287.js new file mode 100644 index 00000000..8ed0a127 --- /dev/null +++ b/assets/js/a76cbaf7.6ee89287.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5864],{9357:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>l,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var r=o(4848),s=o(8453);const n={sidebar_position:1},a="Workflow",i={id:"products/sensor-gateways/wired-mbus-g1/manual/workflow",title:"Workflow",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wired-mbus-g1/manual/workflow.md",sourceDirName:"products/sensor-gateways/wired-mbus-g1/manual",slug:"/products/sensor-gateways/wired-mbus-g1/manual/workflow",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wired-mbus-g1/manual/workflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg"},next:{title:"Hybrid Gateway",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/"}},u={},c=[];function d(e){const t={h1:"h1",p:"p",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"workflow",children:"Workflow"}),"\n",(0,r.jsx)(t.p,{children:"Einleitung"})]})}function l(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>a,x:()=>i});var r=o(6540);const s={},n=r.createContext(s);function a(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a76cbaf7.cbfb5777.js b/assets/js/a76cbaf7.cbfb5777.js deleted file mode 100644 index 4308ddf2..00000000 --- a/assets/js/a76cbaf7.cbfb5777.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5864],{9357:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>l,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var r=o(4848),s=o(8453);const n={sidebar_position:1},a="Workflow",i={id:"products/sensor-gateways/wired-mbus-g1/manual/workflow",title:"Workflow",description:"Einleitung",source:"@site/docs/products/sensor-gateways/wired-mbus-g1/manual/workflow.md",sourceDirName:"products/sensor-gateways/wired-mbus-g1/manual",slug:"/products/sensor-gateways/wired-mbus-g1/manual/workflow",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wired-mbus-g1/manual/workflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Configuration",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg"},next:{title:"Hybrid Gateway",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/"}},u={},c=[];function d(e){const t={h1:"h1",p:"p",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"workflow",children:"Workflow"}),"\n",(0,r.jsx)(t.p,{children:"Einleitung"})]})}function l(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>a,x:()=>i});var r=o(6540);const s={},n=r.createContext(s);function a(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/acb1f41f.3d5baeb5.js b/assets/js/acb1f41f.3d5baeb5.js new file mode 100644 index 00000000..71c5c486 --- /dev/null +++ b/assets/js/acb1f41f.3d5baeb5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[731],{3233:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>p,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var r=s(4848),o=s(8453);const n={sidebar_position:1},a="Temperature Sensors",i={id:"products/sensor-gateways/temperature/index",title:"Temperature Sensors",description:"",source:"@site/docs/products/sensor-gateways/temperature/index.md",sourceDirName:"products/sensor-gateways/temperature",slug:"/products/sensor-gateways/temperature/",permalink:"/iot/products/sensor-gateways/temperature/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/temperature/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Modbus",permalink:"/iot/products/sensor-gateways/modbus/"},next:{title:"Wireless M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/"}},u={},c=[];function d(e){const t={h1:"h1",...(0,o.R)(),...e.components};return(0,r.jsx)(t.h1,{id:"temperature-sensors",children:"Temperature Sensors"})}function p(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>i});var r=s(6540);const o={},n=r.createContext(o);function a(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/acb1f41f.4a09a47d.js b/assets/js/acb1f41f.4a09a47d.js deleted file mode 100644 index b39fcc2c..00000000 --- a/assets/js/acb1f41f.4a09a47d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[731],{3233:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>p,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var r=s(4848),o=s(8453);const n={sidebar_position:1},a="Temperature Sensors",i={id:"products/sensor-gateways/temperature/index",title:"Temperature Sensors",description:"",source:"@site/docs/products/sensor-gateways/temperature/index.md",sourceDirName:"products/sensor-gateways/temperature",slug:"/products/sensor-gateways/temperature/",permalink:"/iot/products/sensor-gateways/temperature/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/temperature/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Modbus",permalink:"/iot/products/sensor-gateways/modbus/"},next:{title:"Wireless M-BUS Gateways",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/"}},u={},c=[];function d(e){const t={h1:"h1",...(0,o.R)(),...e.components};return(0,r.jsx)(t.h1,{id:"temperature-sensors",children:"Temperature Sensors"})}function p(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>i});var r=s(6540);const o={},n=r.createContext(o);function a(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b7192c96.5ff5c1aa.js b/assets/js/b7192c96.5ff5c1aa.js deleted file mode 100644 index 4776e878..00000000 --- a/assets/js/b7192c96.5ff5c1aa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7816],{286:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var o=t(4848),i=t(8453);const r={},s="Hosting & Licensing",c={id:"platform/license/index",title:"Hosting & Licensing",description:"This page is not ready yet",source:"@site/docs/platform/license/index.md",sourceDirName:"platform/license",slug:"/platform/license/",permalink:"/iot/platform/license/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/license/index.md",tags:[],version:"current",frontMatter:{},sidebar:"cloudSidebar",previous:{title:"Downlinks",permalink:"/iot/platform/devices/downlinks"},next:{title:"Lobaro Direct+",permalink:"/iot/platform/license/direct+/"}},a={},l=[];function d(e){const n={admonition:"admonition",h1:"h1",p:"p",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"hosting--licensing",children:"Hosting & Licensing"}),"\n",(0,o.jsx)(n.admonition,{title:"Work in progress",type:"warning",children:(0,o.jsx)(n.p,{children:"This page is not ready yet"})})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>c});var o=t(6540);const i={},r=o.createContext(i);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b7192c96.72dd3746.js b/assets/js/b7192c96.72dd3746.js new file mode 100644 index 00000000..1248d3ee --- /dev/null +++ b/assets/js/b7192c96.72dd3746.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7816],{286:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var o=t(4848),i=t(8453);const r={},s="Hosting & Licensing",c={id:"platform/license/index",title:"Hosting & Licensing",description:"This page is not ready yet",source:"@site/docs/platform/license/index.md",sourceDirName:"platform/license",slug:"/platform/license/",permalink:"/iot/platform/license/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/license/index.md",tags:[],version:"current",frontMatter:{},sidebar:"allDocSidebar",previous:{title:"Downlinks",permalink:"/iot/platform/devices/downlinks"},next:{title:"Lobaro Direct+",permalink:"/iot/platform/license/direct+/"}},a={},l=[];function d(e){const n={admonition:"admonition",h1:"h1",p:"p",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"hosting--licensing",children:"Hosting & Licensing"}),"\n",(0,o.jsx)(n.admonition,{title:"Work in progress",type:"warning",children:(0,o.jsx)(n.p,{children:"This page is not ready yet"})})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>c});var o=t(6540);const i={},r=o.createContext(i);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba9c1b43.6cd83a77.js b/assets/js/ba9c1b43.6cd83a77.js deleted file mode 100644 index 967922e2..00000000 --- a/assets/js/ba9c1b43.6cd83a77.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[346],{4375:(e,d,i)=>{i.r(d),i.d(d,{assets:()=>h,contentTitle:()=>r,default:()=>v,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var n=i(4848),l=i(8453);const s={},r="Changelog",a={id:"platform/administration/changelog",title:"Changelog",description:"Application: Lobaro Backend",source:"@site/docs/platform/administration/changelog.md",sourceDirName:"platform/administration",slug:"/platform/administration/changelog",permalink:"/iot/platform/administration/changelog",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/changelog.md",tags:[],version:"current",frontMatter:{},sidebar:"cloudSidebar",previous:{title:"Administration",permalink:"/iot/platform/administration/"},next:{title:"Datasources",permalink:"/iot/platform/administration/datasources"}},h={},c=[{value:"1.104.5 - 2024-06-24",id:"11045---2024-06-24",level:2},{value:"Changed",id:"changed",level:3},{value:"1.104.4 - 2024-06-24",id:"11044---2024-06-24",level:2},{value:"Fixed",id:"fixed",level:3},{value:"1.104.3 - 2024-06-24",id:"11043---2024-06-24",level:2},{value:"Changed",id:"changed-1",level:3},{value:"Fixed",id:"fixed-1",level:3},{value:"1.104.2 - 2024-06-19",id:"11042---2024-06-19",level:2},{value:"Fixed",id:"fixed-2",level:3},{value:"1.104.1 - 2024-06-19",id:"11041---2024-06-19",level:2},{value:"Changed",id:"changed-2",level:3},{value:"1.104.0 - 2024-06-18",id:"11040---2024-06-18",level:2},{value:"Added",id:"added",level:3},{value:"Changed",id:"changed-3",level:3},{value:"1.103.3 - 2024-06-12",id:"11033---2024-06-12",level:2},{value:"Fixed",id:"fixed-3",level:3},{value:"1.103.2 - 2024-06-11",id:"11032---2024-06-11",level:2},{value:"Fixed",id:"fixed-4",level:3},{value:"1.103.1 - 2024-06-11",id:"11031---2024-06-11",level:2},{value:"Changed",id:"changed-4",level:3},{value:"Fixed",id:"fixed-5",level:3},{value:"1.103.0 - 2024-06-11",id:"11030---2024-06-11",level:2},{value:"Fixed",id:"fixed-6",level:3},{value:"Changed",id:"changed-5",level:3},{value:"1.102.3 - 2024-06-06",id:"11023---2024-06-06",level:2},{value:"Fixed",id:"fixed-7",level:3},{value:"1.102.2 - 2024-06-04",id:"11022---2024-06-04",level:2},{value:"Fixed",id:"fixed-8",level:3},{value:"1.102.1 - 2024-06-04",id:"11021---2024-06-04",level:2},{value:"Fixed",id:"fixed-9",level:3},{value:"1.102.0 - 2024-06-04",id:"11020---2024-06-04",level:2},{value:"Changed",id:"changed-6",level:3},{value:"Added",id:"added-1",level:3},{value:"1.101.10 - 2024-05-25",id:"110110---2024-05-25",level:2},{value:"Fixed",id:"fixed-10",level:3},{value:"Changed",id:"changed-7",level:3},{value:"1.101.9 - 2024-05-24",id:"11019---2024-05-24",level:2},{value:"Fixed",id:"fixed-11",level:3},{value:"1.101.8 - 2024-05-24",id:"11018---2024-05-24",level:2},{value:"Changed",id:"changed-8",level:3},{value:"1.101.7 - 2024-05-24",id:"11017---2024-05-24",level:2},{value:"Added",id:"added-2",level:3},{value:"Changed",id:"changed-9",level:3},{value:"Removed",id:"removed",level:3},{value:"1.101.6 - 2024-05-22",id:"11016---2024-05-22",level:2},{value:"Changed",id:"changed-10",level:3},{value:"1.101.5 - 2024-05-22",id:"11015---2024-05-22",level:2},{value:"Changed",id:"changed-11",level:3},{value:"Fixed",id:"fixed-12",level:3},{value:"1.101.4 - 2024-05-22",id:"11014---2024-05-22",level:2},{value:"Fixed",id:"fixed-13",level:3},{value:"1.101.3 - 2024-05-22 - DO NOT USE - BROKEN",id:"11013---2024-05-22---do-not-use---broken",level:2},{value:"1.101.2 - 2024-05-16",id:"11012---2024-05-16",level:2},{value:"Fixed",id:"fixed-14",level:3},{value:"1.101.1 - 2024-05-16",id:"11011---2024-05-16",level:2},{value:"Fixed",id:"fixed-15",level:3},{value:"1.101.0 - 2024-05-15",id:"11010---2024-05-15",level:2},{value:"Added",id:"added-3",level:3},{value:"Changed",id:"changed-12",level:3},{value:"Deprecated",id:"deprecated",level:3},{value:"Fixed",id:"fixed-16",level:3},{value:"1.100.0 - 2024-05-07",id:"11000---2024-05-07",level:2},{value:"Added",id:"added-4",level:3},{value:"Fixed",id:"fixed-17",level:3},{value:"1.99.6 - 2024-04-30",id:"1996---2024-04-30",level:2},{value:"Fixed",id:"fixed-18",level:3},{value:"Changed",id:"changed-13",level:3},{value:"1.99.5 - 2024-04-23",id:"1995---2024-04-23",level:2},{value:"Fixed",id:"fixed-19",level:3},{value:"1.99.4 - 2024-04-22",id:"1994---2024-04-22",level:2},{value:"Changed",id:"changed-14",level:3},{value:"Fixed",id:"fixed-20",level:3},{value:"1.99.3 - 2024-04-16",id:"1993---2024-04-16",level:2},{value:"Changed",id:"changed-15",level:3},{value:"Fixed",id:"fixed-21",level:3},{value:"v1.99.2 - 2024-04-16",id:"v1992---2024-04-16",level:2},{value:"Added",id:"added-5",level:2},{value:"Changed",id:"changed-16",level:2},{value:"Fixed",id:"fixed-22",level:3},{value:"v1.99.1 - 2024-04-08",id:"v1991---2024-04-08",level:2},{value:"Fixed",id:"fixed-23",level:3},{value:"v1.99.0 - 2024-04-03",id:"v1990---2024-04-03",level:2},{value:"Added",id:"added-6",level:3},{value:"Changed",id:"changed-17",level:3},{value:"Fixed",id:"fixed-24",level:3},{value:"v1.98.1 - 2024-04-02",id:"v1981---2024-04-02",level:2},{value:"Fixed",id:"fixed-25",level:3},{value:"Changed",id:"changed-18",level:3},{value:"v1.98.0 - 2024-04-02",id:"v1980---2024-04-02",level:2},{value:"Changed",id:"changed-19",level:3},{value:"Fixed",id:"fixed-26",level:3},{value:"v1.97.1 - 2024-03-28",id:"v1971---2024-03-28",level:2},{value:"Added",id:"added-7",level:3},{value:"Changed",id:"changed-20",level:3},{value:"Fixed",id:"fixed-27",level:3},{value:"v1.97.0 - 2024-03-26",id:"v1970---2024-03-26",level:2},{value:"DB Migrations",id:"db-migrations",level:3},{value:"Added",id:"added-8",level:3},{value:"Changed",id:"changed-21",level:3},{value:"Fixes",id:"fixes",level:3},{value:"v1.96.5 - 2024-03-12",id:"v1965---2024-03-12",level:2},{value:"Fixed",id:"fixed-28",level:3},{value:"v1.96.4 - 2024-03-10",id:"v1964---2024-03-10",level:2},{value:"Fixed",id:"fixed-29",level:3},{value:"v1.96.3 - 2024-03-07",id:"v1963---2024-03-07",level:2},{value:"Added",id:"added-9",level:3},{value:"Changed",id:"changed-22",level:3},{value:"Fixed",id:"fixed-30",level:3},{value:"v1.96.2 - 2024-03-04",id:"v1962---2024-03-04",level:2},{value:"Fixed",id:"fixed-31",level:3},{value:"v1.96.1 - 2024-03-04",id:"v1961---2024-03-04",level:2},{value:"Added",id:"added-10",level:3},{value:"Fixed",id:"fixed-32",level:3},{value:"v1.96.0 - 2024-02-27",id:"v1960---2024-02-27",level:2},{value:"Added",id:"added-11",level:3},{value:"Changed",id:"changed-23",level:3},{value:"v1.95.3 - 2024-02-27",id:"v1953---2024-02-27",level:2},{value:"Fixed",id:"fixed-33",level:3},{value:"v1.95.2 - 2024-02-24",id:"v1952---2024-02-24",level:2},{value:"Fixed",id:"fixed-34",level:3},{value:"v1.95.1 - 2024-02-24",id:"v1951---2024-02-24",level:2},{value:"Added",id:"added-12",level:3},{value:"Fixed",id:"fixed-35",level:3},{value:"v1.95.0 - 2024-02-24",id:"v1950---2024-02-24",level:2},{value:"Added",id:"added-13",level:3},{value:"Changed",id:"changed-24",level:3},{value:"v1.94.4 - 2024-02-21",id:"v1944---2024-02-21",level:2},{value:"Added",id:"added-14",level:3},{value:"Changed",id:"changed-25",level:3},{value:"v1.94.3 - 2024-02-20",id:"v1943---2024-02-20",level:2},{value:"Fixed",id:"fixed-36",level:3},{value:"v1.94.2 - 2024-02-20 - SKIPPED DUE TO BUILD PROBLEMS",id:"v1942---2024-02-20---skipped-due-to-build-problems",level:2},{value:"Changed",id:"changed-26",level:3},{value:"v1.94.1 - 2024-02-19",id:"v1941---2024-02-19",level:2},{value:"Changed",id:"changed-27",level:3},{value:"Fixed",id:"fixed-37",level:3},{value:"v1.94.0 - 2024-02-15",id:"v1940----2024-02-15",level:2},{value:"Changed",id:"changed-28",level:3},{value:"Fixed",id:"fixed-38",level:3},{value:"v1.93.1 - 2024-02-14",id:"v1931----2024-02-14",level:2},{value:"Reverted",id:"reverted",level:3},{value:"v1.93.0 - 2024-02-09",id:"v1930----2024-02-09",level:2},{value:"Added",id:"added-15",level:3},{value:"Changed",id:"changed-29",level:3},{value:"Fixed",id:"fixed-39",level:3},{value:"v1.92.0 - 2024-02-02",id:"v1920----2024-02-02",level:2},{value:"Added",id:"added-16",level:3},{value:"Changed",id:"changed-30",level:3},{value:"v1.91.1 - 2024-01-29",id:"v1911---2024-01-29",level:2},{value:"Fixed",id:"fixed-40",level:3},{value:"v1.91.0 - 2024-01-31",id:"v1910---2024-01-31",level:2},{value:"Added",id:"added-17",level:3},{value:"v1.90.0 - 2024-01-26",id:"v1900---2024-01-26",level:2},{value:"Added",id:"added-18",level:3},{value:"Changed",id:"changed-31",level:3},{value:"Fixed",id:"fixed-41",level:3},{value:"v1.89.0 - 2024-01-22",id:"v1890---2024-01-22",level:2},{value:"Added",id:"added-19",level:2},{value:"v1.88.2 - 2024-01-19",id:"v1882---2024-01-19",level:2},{value:"Fixed",id:"fixed-42",level:2},{value:"v1.88.1 - 2024-01-19",id:"v1881---2024-01-19",level:2},{value:"Changed",id:"changed-32",level:3},{value:"v1.88.0 - 2024-01-16",id:"v1880---2024-01-16",level:2},{value:"Changed",id:"changed-33",level:3},{value:"Added",id:"added-20",level:3},{value:"v1.87.1 - 2023-12-19",id:"v1871---2023-12-19",level:2},{value:"Fixed",id:"fixed-43",level:3},{value:"v1.87.0 - 2023-12-19",id:"v1870---2023-12-19",level:2},{value:"Changed",id:"changed-34",level:3},{value:"v1.86.0 - 2023-12-14",id:"v1860---2023-12-14",level:2},{value:"Added",id:"added-21",level:3},{value:"Fixed",id:"fixed-44",level:3},{value:"v1.85.0 - 2023-12-12",id:"v1850---2023-12-12",level:2},{value:"Changed",id:"changed-35",level:3},{value:"Fixed",id:"fixed-45",level:3},{value:"v1.84.2 - 2023-12-11",id:"v1842---2023-12-11",level:2},{value:"Changed",id:"changed-36",level:3},{value:"v1.84.1 - 2023-12-11",id:"v1841---2023-12-11",level:2},{value:"Note",id:"note",level:3},{value:"v1.84.0 - 2023-12-07",id:"v1840---2023-12-07",level:2},{value:"Added",id:"added-22",level:3},{value:"Fixed",id:"fixed-46",level:3},{value:"v1.83.0 - 2023-12-04",id:"v1830---2023-12-04",level:2},{value:"Added",id:"added-23",level:3},{value:"v1.82.1 - 2023-11-9",id:"v1821---2023-11-9",level:2},{value:"Fixed",id:"fixed-47",level:3},{value:"Changed",id:"changed-37",level:3},{value:"v1.82.0 - 2023-10-24",id:"v1820---2023-10-24",level:2},{value:"Added",id:"added-24",level:3},{value:"v1.81.2 - 2023-10-23",id:"v1812---2023-10-23",level:2},{value:"Fixed",id:"fixed-48",level:3},{value:"v1.81.1 - 2023-10-08",id:"v1811---2023-10-08",level:2},{value:"Fixed",id:"fixed-49",level:3},{value:"Added",id:"added-25",level:3},{value:"v1.81.0 - 2023-10-02",id:"v1810---2023-10-02",level:2},{value:"Fixed",id:"fixed-50",level:3},{value:"Added",id:"added-26",level:3},{value:"Changed",id:"changed-38",level:3},{value:"v1.80.3 - 2023-08-19",id:"v1803---2023-08-19",level:2},{value:"Fixed",id:"fixed-51",level:3},{value:"v1.80.2 - 2023-08-18",id:"v1802---2023-08-18",level:2},{value:"Fixed",id:"fixed-52",level:3},{value:"v1.80.1 - 2023-08-18",id:"v1801---2023-08-18",level:2},{value:"Fixed",id:"fixed-53",level:3},{value:"Changed",id:"changed-39",level:3},{value:"v1.80.0 - 2023-08-15",id:"v1800---2023-08-15",level:2},{value:"Added",id:"added-27",level:3},{value:"Changed",id:"changed-40",level:3},{value:"Fixed",id:"fixed-54",level:3},{value:"v1.79.1 - 2023-07-14",id:"v1791---2023-07-14",level:2},{value:"Fixed",id:"fixed-55",level:3},{value:"v1.79.0 - 2023-07-13",id:"v1790---2023-07-13",level:2},{value:"Added",id:"added-28",level:3},{value:"Changed",id:"changed-41",level:3},{value:"v1.78.1 - 2023-07-05",id:"v1781---2023-07-05",level:2},{value:"Added",id:"added-29",level:3},{value:"Fixed",id:"fixed-56",level:3},{value:"v1.77.0 - 2023-06-29",id:"v1770---2023-06-29",level:2},{value:"Added",id:"added-30",level:3},{value:"Changed",id:"changed-42",level:3},{value:"v1.76.0 - 2023-06-22",id:"v1760---2023-06-22",level:2},{value:"Added",id:"added-31",level:3},{value:"Changed",id:"changed-43",level:3},{value:"Fixed",id:"fixed-57",level:3},{value:"v1.75.4 - 2023-06-13",id:"v1754---2023-06-13",level:2},{value:"Added",id:"added-32",level:3},{value:"v1.75.3 - 2023-06-06",id:"v1753---2023-06-06",level:2},{value:"Added",id:"added-33",level:3},{value:"Fixed",id:"fixed-58",level:3},{value:"v1.75.2 - 2023-06-02",id:"v1752---2023-06-02",level:2},{value:"Fixed",id:"fixed-59",level:3},{value:"v1.75.1 - 2023-06-02",id:"v1751---2023-06-02",level:2},{value:"Added",id:"added-34",level:3},{value:"v1.75.0 - 2023-06-01",id:"v1750---2023-06-01",level:2},{value:"Added",id:"added-35",level:3},{value:"v1.74.0 - 2023-05-31",id:"v1740---2023-05-31",level:2},{value:"Added",id:"added-36",level:3},{value:"Fixed",id:"fixed-60",level:2},{value:"Changed",id:"changed-44",level:3},{value:"Fixed",id:"fixed-61",level:3},{value:"v1.73.0 - 2023-05-18",id:"v1730---2023-05-18",level:2},{value:"Added",id:"added-37",level:3},{value:"Fixed",id:"fixed-62",level:3},{value:"Change",id:"change",level:3},{value:"v1.72.0 - 2023-05-16",id:"v1720---2023-05-16",level:2},{value:"Added",id:"added-38",level:3},{value:"Fixed",id:"fixed-63",level:3},{value:"v1.71.9 - 2023-04-17",id:"v1719---2023-04-17",level:2},{value:"Changed",id:"changed-45",level:3},{value:"Fixed",id:"fixed-64",level:3},{value:"v1.71.7 - 2023-04-05",id:"v1717---2023-04-05",level:2},{value:"Changed",id:"changed-46",level:3},{value:"v1.71.6 - 2023-04-05",id:"v1716---2023-04-05",level:2},{value:"Fixed",id:"fixed-65",level:3},{value:"v1.71.5 - 2023-04-04",id:"v1715---2023-04-04",level:2},{value:"Fixed",id:"fixed-66",level:3},{value:"v1.71.4 - 2023-04-03",id:"v1714---2023-04-03",level:2},{value:"Fixed",id:"fixed-67",level:3},{value:"v1.71.3 - 2023-03-30",id:"v1713---2023-03-30",level:2},{value:"Fixed",id:"fixed-68",level:3},{value:"v1.71.2 - 2023-03-28",id:"v1712---2023-03-28",level:2},{value:"Changed",id:"changed-47",level:3},{value:"v1.71.1 - 2023-03-27",id:"v1711---2023-03-27",level:2},{value:"Added",id:"added-39",level:3},{value:"v1.70.2 - 2023-03-19",id:"v1702---2023-03-19",level:2},{value:"Added",id:"added-40",level:3},{value:"Changed",id:"changed-48",level:3},{value:"v1.70.1 - 2023-02-15",id:"v1701---2023-02-15",level:2},{value:"Added",id:"added-41",level:3},{value:"Fixed",id:"fixed-69",level:3},{value:"v1.70.0 - 2023-02-01",id:"v1700---2023-02-01",level:2},{value:"Added",id:"added-42",level:3},{value:"v1.64.1 - 2023-01-30",id:"v1641---2023-01-30",level:2},{value:"Fixed",id:"fixed-70",level:3},{value:"v1.64.0 - 2023-01-17",id:"v1640---2023-01-17",level:2},{value:"Changed",id:"changed-49",level:3},{value:"Fixed",id:"fixed-71",level:3},{value:"v1.63.0 - 2022-12-07",id:"v1630---2022-12-07",level:2},{value:"Added",id:"added-43",level:3},{value:"Changed",id:"changed-50",level:3},{value:"Fixed",id:"fixed-72",level:3},{value:"v1.62.1 - 2022-11-25",id:"v1621---2022-11-25",level:2},{value:"Added",id:"added-44",level:3},{value:"v1.61.7 - 2022-11-23",id:"v1617---2022-11-23",level:2},{value:"Fixed",id:"fixed-73",level:3},{value:"v1.61.6 - 2022-11-23",id:"v1616---2022-11-23",level:2},{value:"Fixed",id:"fixed-74",level:3},{value:"1.61.5 - 2022-11-18",id:"1615---2022-11-18",level:2},{value:"Fixed",id:"fixed-75",level:3},{value:"v1.61.2 - 2022-11-15",id:"v1612---2022-11-15",level:2},{value:"Added",id:"added-45",level:3},{value:"Fixed",id:"fixed-76",level:3},{value:"v1.61.1 - 2022-11-04",id:"v1611---2022-11-04",level:2},{value:"Added",id:"added-46",level:3},{value:"Changed",id:"changed-51",level:3},{value:"v1.61.0 - 2022-11-04",id:"v1610---2022-11-04",level:2},{value:"Added",id:"added-47",level:3},{value:"Changed",id:"changed-52",level:3},{value:"Fixed",id:"fixed-77",level:3},{value:"v1.60.0 - 2022-10-13",id:"v1600---2022-10-13",level:2},{value:"Added",id:"added-48",level:3},{value:"Changed",id:"changed-53",level:3},{value:"Fixed",id:"fixed-78",level:3},{value:"v1.59.0 - 2022-10-05",id:"v1590---2022-10-05",level:2},{value:"Added",id:"added-49",level:3},{value:"Fixed",id:"fixed-79",level:3},{value:"v1.58.1 - 2022-09-30",id:"v1581---2022-09-30",level:2},{value:"Fixed",id:"fixed-80",level:3},{value:"v1.58.0 - 2022-09-30",id:"v1580---2022-09-30",level:2},{value:"Added",id:"added-50",level:3},{value:"Changed",id:"changed-54",level:3},{value:"v1.57.0 - 2022-09-23",id:"v1570---2022-09-23",level:2},{value:"Added",id:"added-51",level:3},{value:"Fixed",id:"fixed-81",level:3},{value:"v1.56.0 - 2022-09-20",id:"v1560---2022-09-20",level:2},{value:"Added",id:"added-52",level:3},{value:"Fixed",id:"fixed-82",level:3},{value:"v1.55.0 - 2022-08-09",id:"v1550---2022-08-09",level:2},{value:"Added",id:"added-53",level:3},{value:"Changed",id:"changed-55",level:3},{value:"v1.54.1 - 2022-08-09",id:"v1541---2022-08-09",level:2},{value:"Added",id:"added-54",level:3},{value:"v1.54.0 - 2022-08-09 [YANKED]",id:"v1540---2022-08-09-yanked",level:2},{value:"Added",id:"added-55",level:3},{value:"v1.53.1 - 2022-08-05",id:"v1531---2022-08-05",level:2},{value:"Changed",id:"changed-56",level:3},{value:"Added",id:"added-56",level:3},{value:"Fixed",id:"fixed-83",level:3},{value:"v1.52.2 - 2022-07-28",id:"v1522---2022-07-28",level:2},{value:"Changed",id:"changed-57",level:3},{value:"v1.52.0 - 2022-07-25",id:"v1520---2022-07-25",level:2},{value:"Added",id:"added-57",level:3},{value:"Fixed",id:"fixed-84",level:3},{value:"v1.51.1 - 2022-07-04",id:"v1511---2022-07-04",level:2},{value:"Added",id:"added-58",level:3},{value:"Changed",id:"changed-58",level:3},{value:"Fixed",id:"fixed-85",level:3},{value:"v1.49.0 - 2022-06-20",id:"v1490---2022-06-20",level:2},{value:"Added",id:"added-59",level:3},{value:"Fixed",id:"fixed-86",level:3},{value:"v1.48.0 - 2022-06-15",id:"v1480---2022-06-15",level:2},{value:"Added",id:"added-60",level:3},{value:"Fixed",id:"fixed-87",level:3},{value:"v1.47.0 - 2022-06-13",id:"v1470---2022-06-13",level:2},{value:"Added",id:"added-61",level:3},{value:"Changed",id:"changed-59",level:3},{value:"v1.46.2 - 2022-05-18",id:"v1462---2022-05-18",level:2},{value:"Fixed",id:"fixed-88",level:3},{value:"v1.46.1 - 2022-05-18",id:"v1461---2022-05-18",level:2},{value:"Changed",id:"changed-60",level:3},{value:"v1.46.0 - 2022-05-18",id:"v1460---2022-05-18",level:2},{value:"Added",id:"added-62",level:3},{value:"v1.45.2 - 2022-05-13",id:"v1452---2022-05-13",level:2},{value:"Fixed",id:"fixed-89",level:3},{value:"v1.45.1 - 2022-05-11",id:"v1451---2022-05-11",level:2},{value:"Added",id:"added-63",level:3},{value:"v1.43.2 - 2022-05-09",id:"v1432---2022-05-09",level:2},{value:"Changed",id:"changed-61",level:3},{value:"Fixed",id:"fixed-90",level:3},{value:"v1.43.1 - 2022-05-08",id:"v1431---2022-05-08",level:2},{value:"Fixed",id:"fixed-91",level:3},{value:"v1.43.0 - 2022-05-06",id:"v1430---2022-05-06",level:2},{value:"Changed",id:"changed-62",level:3},{value:"v1.42.0 - 2022-05-05",id:"v1420---2022-05-05",level:2},{value:"Added",id:"added-64",level:3},{value:"v1.41.2 - 2022-05-04",id:"v1412---2022-05-04",level:2},{value:"Fixed",id:"fixed-92",level:3},{value:"v1.41.1 - 2022-05-03",id:"v1411---2022-05-03",level:2},{value:"Changed",id:"changed-63",level:3},{value:"v1.41.0 - 2022-05-02",id:"v1410---2022-05-02",level:2},{value:"Added",id:"added-65",level:3},{value:"Changed",id:"changed-64",level:3},{value:"Fixed",id:"fixed-93",level:3},{value:"Added",id:"added-66",level:3},{value:"v1.40.1 - 2022-04-28",id:"v1401---2022-04-28",level:2},{value:"Added",id:"added-67",level:3},{value:"Fixed",id:"fixed-94",level:3},{value:"v1.40.0 - 2022-04-28",id:"v1400---2022-04-28",level:2},{value:"Added",id:"added-68",level:3},{value:"Changed",id:"changed-65",level:3},{value:"v1.39.0 - 2022-04-25",id:"v1390---2022-04-25",level:2},{value:"Added",id:"added-69",level:3},{value:"Changed",id:"changed-66",level:3},{value:"v1.38.0 - 2022-04-25",id:"v1380---2022-04-25",level:2},{value:"Added",id:"added-70",level:3},{value:"Changed",id:"changed-67",level:3},{value:"Fixed",id:"fixed-95",level:3},{value:"v1.37.0 - 2022-04-21",id:"v1370---2022-04-21",level:2},{value:"Changed",id:"changed-68",level:3},{value:"v1.36.0 - 2022-04-20",id:"v1360---2022-04-20",level:2},{value:"Added",id:"added-71",level:3},{value:"Changed",id:"changed-69",level:3},{value:"v1.35.0 - 2022-04-19",id:"v1350---2022-04-19",level:2},{value:"Added",id:"added-72",level:3},{value:"Changed",id:"changed-70",level:3},{value:"Fixed",id:"fixed-96",level:3},{value:"v1.34.0 - 2022-03-29",id:"v1340---2022-03-29",level:2},{value:"Changed",id:"changed-71",level:3},{value:"Fixed",id:"fixed-97",level:3},{value:"v1.33.1 - 2022-03-24",id:"v1331---2022-03-24",level:2},{value:"Changed",id:"changed-72",level:3},{value:"Fixed",id:"fixed-98",level:3},{value:"v1.33.0 - 2022-03-23",id:"v1330---2022-03-23",level:2},{value:"Added",id:"added-73",level:3},{value:"Changed",id:"changed-73",level:3},{value:"v1.32.1 - 2022-03-04",id:"v1321---2022-03-04",level:2},{value:"Changed",id:"changed-74",level:3},{value:"v1.32.0 - 2022-03-01",id:"v1320---2022-03-01",level:2},{value:"Changed",id:"changed-75",level:3},{value:"Added",id:"added-74",level:3},{value:"Fixed",id:"fixed-99",level:3},{value:"v1.31.0 - 2022-02-17",id:"v1310---2022-02-17",level:2},{value:"Added",id:"added-75",level:3},{value:"Fixed",id:"fixed-100",level:3},{value:"Changed",id:"changed-76",level:3},{value:"v1.30.0 - 2022-02-08",id:"v1300---2022-02-08",level:2},{value:"Changed",id:"changed-77",level:3},{value:"v1.29.2 - 2022-02-07",id:"v1292---2022-02-07",level:2},{value:"Added",id:"added-76",level:3},{value:"Changed",id:"changed-78",level:3},{value:"Fixed",id:"fixed-101",level:3},{value:"v1.29.1 - 2022-02-02",id:"v1291---2022-02-02",level:2},{value:"Added",id:"added-77",level:3},{value:"Fixed",id:"fixed-102",level:3},{value:"1.29.0 - skipped due to problems with build",id:"1290---skipped-due-to-problems-with-build",level:2},{value:"v1.28.1 - 2022-01-14",id:"v1281---2022-01-14",level:2},{value:"Added",id:"added-78",level:3},{value:"Changed",id:"changed-79",level:3},{value:"Fixed",id:"fixed-103",level:3},{value:"v1.28.0 - 2022-01-12",id:"v1280---2022-01-12",level:2},{value:"Added",id:"added-79",level:3},{value:"Changed",id:"changed-80",level:3},{value:"Fixed",id:"fixed-104",level:3},{value:"v1.27.2 - 2021-12-16",id:"v1272---2021-12-16",level:2},{value:"Added",id:"added-80",level:3},{value:"Fixed",id:"fixed-105",level:3},{value:"v1.27.1 - 2021-12-02",id:"v1271---2021-12-02",level:2},{value:"Fixed",id:"fixed-106",level:3},{value:"v1.27.0 - 2021-12-01",id:"v1270---2021-12-01",level:2},{value:"Added",id:"added-81",level:3},{value:"Changed",id:"changed-81",level:3},{value:"Fixed",id:"fixed-107",level:3},{value:"v1.26.1 - 2021-11-30",id:"v1261---2021-11-30",level:2},{value:"Added",id:"added-82",level:3},{value:"v1.26.0 - 2021-11-30",id:"v1260---2021-11-30",level:2},{value:"Added",id:"added-83",level:3},{value:"v1.25.0 - 2021-11-15",id:"v1250---2021-11-15",level:2},{value:"Added",id:"added-84",level:3},{value:"v1.24.0 - 2021-11-12",id:"v1240---2021-11-12",level:2},{value:"Added",id:"added-85",level:3},{value:"Fixed",id:"fixed-108",level:3},{value:"v1.23.0 - 2021-11-04",id:"v1230---2021-11-04",level:2},{value:"Added",id:"added-86",level:3},{value:"v1.22.3 - 2021-10-15",id:"v1223---2021-10-15",level:2},{value:"Added",id:"added-87",level:3},{value:"Fixed",id:"fixed-109",level:3},{value:"v1.22.0 - 2021-10-11",id:"v1220---2021-10-11",level:2},{value:"Added",id:"added-88",level:3},{value:"Fixed",id:"fixed-110",level:3},{value:"v1.21.0 - 2021-10-11",id:"v1210---2021-10-11",level:2},{value:"Added",id:"added-89",level:3},{value:"Changed",id:"changed-82",level:3},{value:"Fixed",id:"fixed-111",level:3},{value:"v1.20.0 - 2021-09-30",id:"v1200---2021-09-30",level:2},{value:"Added",id:"added-90",level:3},{value:"Fixed",id:"fixed-112",level:3},{value:"v1.19.5 - 2021-09-28",id:"v1195---2021-09-28",level:2},{value:"Fixed",id:"fixed-113",level:3},{value:"v1.19.4 - 2021-09-24",id:"v1194---2021-09-24",level:2},{value:"Added",id:"added-91",level:3},{value:"Changed",id:"changed-83",level:3},{value:"Fixed",id:"fixed-114",level:3},{value:"v1.19.3 - 2021-09-23",id:"v1193---2021-09-23",level:2},{value:"Added",id:"added-92",level:3},{value:"Fixed",id:"fixed-115",level:3},{value:"v1.19.2 - 2021-09-20",id:"v1192---2021-09-20",level:2},{value:"Changed",id:"changed-84",level:3},{value:"Fixed",id:"fixed-116",level:3},{value:"v1.19.1 - 2021-09-19",id:"v1191---2021-09-19",level:2},{value:"Added",id:"added-93",level:3},{value:"Fixed",id:"fixed-117",level:3},{value:"v1.18.3 - 2021-09-13",id:"v1183---2021-09-13",level:2},{value:"Fixed",id:"fixed-118",level:3},{value:"v1.18.2 - 2021-09-09",id:"v1182---2021-09-09",level:2},{value:"Fixed",id:"fixed-119",level:3},{value:"v1.18.1 - 2021-09-09",id:"v1181---2021-09-09",level:2},{value:"Fixed",id:"fixed-120",level:3},{value:"v1.18.0 - 2021-09-07",id:"v1180---2021-09-07",level:2},{value:"Added",id:"added-94",level:3},{value:"Changed",id:"changed-85",level:3},{value:"Fixed",id:"fixed-121",level:3},{value:"v1.17.4 - 2021-09-01",id:"v1174---2021-09-01",level:2},{value:"Fixed",id:"fixed-122",level:3},{value:"v1.17.3 - 2021-08-31",id:"v1173---2021-08-31",level:2},{value:"Fixed",id:"fixed-123",level:3},{value:"v1.17.2 - 2021-08-30",id:"v1172---2021-08-30",level:2},{value:"Changed",id:"changed-86",level:3},{value:"Fixed",id:"fixed-124",level:3},{value:"v1.17.1 - 2021-08-30",id:"v1171---2021-08-30",level:2},{value:"Changed",id:"changed-87",level:3},{value:"v1.17.0 - 2021-08-30",id:"v1170---2021-08-30",level:2},{value:"Added",id:"added-95",level:3},{value:"Changed",id:"changed-88",level:3},{value:"Fixed",id:"fixed-125",level:3},{value:"v1.16.0 - 2021-08-18",id:"v1160---2021-08-18",level:2},{value:"v1.15.2 - 2021-08-18",id:"v1152---2021-08-18",level:2},{value:"v1.15.1 - 2021-08-16",id:"v1151---2021-08-16",level:2},{value:"Added",id:"added-96",level:3},{value:"Changed",id:"changed-89",level:3},{value:"v1.14.1 - 2021-08-03",id:"v1141---2021-08-03",level:2},{value:"Fixed",id:"fixed-126",level:3},{value:"v1.14.0 - 2021-08-02",id:"v1140---2021-08-02",level:2},{value:"Changed",id:"changed-90",level:3},{value:"Added",id:"added-97",level:3},{value:"Fixed",id:"fixed-127",level:3},{value:"v1.13.2 - 2021-07-09",id:"v1132---2021-07-09",level:2},{value:"Added",id:"added-98",level:3},{value:"Changed",id:"changed-91",level:3},{value:"Fixed",id:"fixed-128",level:3},{value:"v1.12.3 - 2021-07-02",id:"v1123---2021-07-02",level:2},{value:"Change",id:"change-1",level:3},{value:"v1.12.2 - 2021-07-02",id:"v1122---2021-07-02",level:2},{value:"Changed",id:"changed-92",level:3},{value:"Fixed",id:"fixed-129",level:3},{value:"v1.12.00 - 2021-06-15",id:"v11200---2021-06-15",level:2},{value:"Added",id:"added-99",level:3},{value:"v1.11.17 - 2021-06-14",id:"v11117---2021-06-14",level:2},{value:"Fixed",id:"fixed-130",level:3},{value:"v1.11.16 - 2021-05-26",id:"v11116---2021-05-26",level:2},{value:"Added",id:"added-100",level:3},{value:"Fixed",id:"fixed-131",level:3},{value:"Changed",id:"changed-93",level:3},{value:"v1.11.12 - 2021-05-11",id:"v11112---2021-05-11",level:2},{value:"Added",id:"added-101",level:3},{value:"v1.11.11 - 2021-04-26",id:"v11111---2021-04-26",level:2},{value:"fixed",id:"fixed-132",level:3},{value:"v1.11.10 - 2021-04-23",id:"v11110---2021-04-23",level:2},{value:"Added",id:"added-102",level:3},{value:"Changed",id:"changed-94",level:3},{value:"v1.11.09 - 2021-04-xx",id:"v11109---2021-04-xx",level:2},{value:"Added",id:"added-103",level:3},{value:"v1.11.8 - 2021-04-15",id:"v1118---2021-04-15",level:2},{value:"Added",id:"added-104",level:3},{value:"Changed",id:"changed-95",level:3},{value:"Fixed",id:"fixed-133",level:3},{value:"v1.11.6 - 2021-03-31",id:"v1116---2021-03-31",level:2},{value:"Changed",id:"changed-96",level:3},{value:"v1.11.5 - 2021-03-22",id:"v1115---2021-03-22",level:2},{value:"Added",id:"added-105",level:3},{value:"Changed",id:"changed-97",level:3},{value:"v1.11.4 - 2021-03-16",id:"v1114---2021-03-16",level:2},{value:"Added",id:"added-106",level:3},{value:"Changed",id:"changed-98",level:3},{value:"Fixed",id:"fixed-134",level:3},{value:"v1.11.0 - 2021-03-03",id:"v1110---2021-03-03",level:2},{value:"Added",id:"added-107",level:3},{value:"v1.10.7 - 2021-02-26",id:"v1107---2021-02-26",level:2},{value:"Changed",id:"changed-99",level:3},{value:"v1.10.6 - 2021-02-18",id:"v1106---2021-02-18",level:2},{value:"Added",id:"added-108",level:3},{value:"Fixed",id:"fixed-135",level:3},{value:"v1.10.2 - 2021-02-13",id:"v1102---2021-02-13",level:2},{value:"Fixed",id:"fixed-136",level:3},{value:"v1.10.1 - 2021-02-12",id:"v1101---2021-02-12",level:2},{value:"Added",id:"added-109",level:3},{value:"Changed",id:"changed-100",level:3},{value:"Fixed",id:"fixed-137",level:3},{value:"v1.10.0 - 2021-02-08",id:"v1100---2021-02-08",level:2},{value:"Added",id:"added-110",level:3},{value:"Changed",id:"changed-101",level:3},{value:"Fixed",id:"fixed-138",level:3},{value:"v1.9.2 - 2021-01-25",id:"v192---2021-01-25",level:2},{value:"Added",id:"added-111",level:3},{value:"1.9.1 - 2021-01-15",id:"191---2021-01-15",level:2},{value:"Fixed",id:"fixed-139",level:3},{value:"v1.9.1 - 2021-01-13",id:"v191---2021-01-13",level:2},{value:"Added",id:"added-112",level:3},{value:"Changed",id:"changed-102",level:3},{value:"Fixed",id:"fixed-140",level:3},{value:"v1.8.7 - 2020-09-29",id:"v187---2020-09-29",level:2},{value:"Added",id:"added-113",level:3},{value:"Fixed",id:"fixed-141",level:3},{value:"v1.8.5 - 2020-09-08",id:"v185---2020-09-08",level:2},{value:"Fixed",id:"fixed-142",level:3},{value:"v1.8.4 - 2020-09-02",id:"v184---2020-09-02",level:2},{value:"Fixed",id:"fixed-143",level:3},{value:"v1.8.3 - 2020-08-28",id:"v183---2020-08-28",level:2},{value:"Added",id:"added-114",level:3},{value:"Changed",id:"changed-103",level:3},{value:"v1.7.0 - 2020-06-04",id:"v170---2020-06-04",level:2},{value:"Added",id:"added-115",level:3},{value:"Changed",id:"changed-104",level:3},{value:"v1.6.0 - 2020-04-09",id:"v160---2020-04-09",level:2},{value:"Added",id:"added-116",level:3},{value:"Changed",id:"changed-105",level:3},{value:"Removed",id:"removed-1",level:3},{value:"Fixed",id:"fixed-144",level:3},{value:"v1.5.0",id:"v150",level:2},{value:"Added",id:"added-117",level:3}];function o(e){const d={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d.h1,{id:"changelog",children:"Changelog"}),"\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.strong,{children:"Application:"})," Lobaro Backend"]}),"\n",(0,n.jsx)(d.h2,{id:"11045---2024-06-24",children:"1.104.5 - 2024-06-24"}),"\n",(0,n.jsx)(d.h3,{id:"changed",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices Created At added as hidden default column in Devices Table"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11044---2024-06-24",children:"1.104.4 - 2024-06-24"}),"\n",(0,n.jsx)(d.h3,{id:"fixed",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Parser UI - Editor would switch to default parser when editing the custom parser"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11043---2024-06-24",children:"1.104.3 - 2024-06-24"}),"\n",(0,n.jsx)(d.h3,{id:"changed-1",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Default input format for js parser function ",(0,n.jsx)(d.code,{children:"Record.setTime()"})," is an RFC3339 string, default timestamp format for JSON.","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["It can be created from a Date in JavaScript via ",(0,n.jsx)(d.code,{children:"new Date(unixms).toISOString()"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-1",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fix api token deletion message"}),"\n",(0,n.jsx)(d.li,{children:"HTTP handler panic for Chirpstack Join events"}),"\n",(0,n.jsx)(d.li,{children:"Devices Table - localStorage was not use in some special cases - causing the table to change unexpectedly when sorting or filtering"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11042---2024-06-19",children:"1.104.2 - 2024-06-19"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-2",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"bad timing caused nil Nats client on startup"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11041---2024-06-19",children:"1.104.1 - 2024-06-19"}),"\n",(0,n.jsx)(d.h3,{id:"changed-2",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Devices Table - deactivate ability to sort by organisation when displaying scope "global" or "organisation with suborgs" as it caused empty results. Workaround is to change into the organisation and display the devices table'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11040---2024-06-18",children:"1.104.0 - 2024-06-18"}),"\n",(0,n.jsx)(d.h3,{id:"added",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices Table - New Column Settings Dialog - Pin columns to left or right edge of the table to make them always visible while scrolling"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-3",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Key Exchange Import - Reworked with async backend processing to handle large key imports"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11033---2024-06-12",children:"1.103.3 - 2024-06-12"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-3",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices Page: when opening a filter dialog, the filter input field is always focused"}),"\n",(0,n.jsx)(d.li,{children:"broken export on non-devicesPages"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11032---2024-06-11",children:"1.103.2 - 2024-06-11"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-4",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fix double x axis scroll bar - where the table was not scrollable because the page displayed a scrollbar over the devices table scrollbar"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11031---2024-06-11",children:"1.103.1 - 2024-06-11"}),"\n",(0,n.jsx)(d.h3,{id:"changed-4",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Lansen wMbus Gateways will use a "las-" prefix in the address.'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-5",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed translation of export devices csv dialog on devices page"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11030---2024-06-11",children:"1.103.0 - 2024-06-11"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-6",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"WmbusKeyImport: Reset all button now resets all fields"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-5",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Export Devices CSV now exports:","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"selected or all devices of a device type"}),"\n",(0,n.jsx)(d.li,{children:"CSV format as configured in the table config or in a hardware import conform CSV format"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11023---2024-06-06",children:"1.102.3 - 2024-06-06"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-7",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"WmbusKeyImport: Scale table (full page) and progressbar (only half page) as intended"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11022---2024-06-04",children:"1.102.2 - 2024-06-04"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-8",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Too much logging of failed wMBus parsing attempts"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11021---2024-06-04",children:"1.102.1 - 2024-06-04"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-9",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Parser cache not being saved due to failing Cache directory creation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11020---2024-06-04",children:"1.102.0 - 2024-06-04"}),"\n",(0,n.jsx)(d.h3,{id:"changed-6",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Reworked wMBus key import page, unifying import via CSV and Key Exchange Platform"}),"\n",(0,n.jsx)(d.li,{children:"Key import in batches for better performance"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-1",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Supported importing of Sensus RF key CSVs"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"110110---2024-05-25",children:"1.101.10 - 2024-05-25"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-10",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed a bug where the device type side menu would show wrong counts when a device type was not owned by the current organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-7",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Type Side Menu size when expanded is now smaller"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11019---2024-05-24",children:"1.101.9 - 2024-05-24"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-11",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed a bug where the device type side menu would not show the correct device type count"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11018---2024-05-24",children:"1.101.8 - 2024-05-24"}),"\n",(0,n.jsx)(d.h3,{id:"changed-8",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"New Devices Data Table is now permanent active - removed experimental design switch in myAccountMenu"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11017---2024-05-24",children:"1.101.7 - 2024-05-24"}),"\n",(0,n.jsx)(d.h3,{id:"added-2",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"suborg"}),"role for REST API Tokens: Read-only access to devices and parsed data of all suborgs"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-9",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices CSV export only exports the devices of the current selected device type"}),"\n",(0,n.jsxs)(d.li,{children:["Improve PipelineStore queries, avoiding ",(0,n.jsx)(d.code,{children:"LIMIT 1"})," for unique data queries, update cache device with every device update in (pipeline) DB"]}),"\n",(0,n.jsxs)(d.li,{children:["Making ",(0,n.jsx)(d.code,{children:"xlog"})," main logging factory:","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Wrapping ",(0,n.jsx)(d.code,{children:"slog.Logger"}),", but also supplying some ",(0,n.jsx)(d.code,{children:"logrus"})," functions (",(0,n.jsx)(d.code,{children:"WithError()"}),", ",(0,n.jsx)(d.code,{children:"WithFields()"}),", \xb4...) for compatibility"]}),"\n",(0,n.jsx)(d.li,{children:"Added functions for dynamically changing logging settings"}),"\n",(0,n.jsx)(d.li,{children:"Unifying Log levels, to make a future change of the logging backend easier"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.li,{children:"Device Type Side Menu uses cached queries for device counts - frontend caches for 1 minute - backend caches for 5 minutes and invalidates cache if new devices are created"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"removed",children:"Removed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"slogLogrus"}),"package, as the logging backend was switched from logrus to slog"]}),"\n",(0,n.jsxs)(d.li,{children:["Direct ",(0,n.jsx)(d.code,{children:"logrus"})," dependency; still needed by github.com/docker/docker"]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11016---2024-05-22",children:"1.101.6 - 2024-05-22"}),"\n",(0,n.jsx)(d.h3,{id:"changed-10",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Improvements in UI for Device Type Side Menu"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11015---2024-05-22",children:"1.101.5 - 2024-05-22"}),"\n",(0,n.jsx)(d.h3,{id:"changed-11",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update mbus lib to v1.11.3"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-12",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fix humanizing attempts of invalid compact profiles"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11014---2024-05-22",children:"1.101.4 - 2024-05-22"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-13",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Export Devices CSV failed on Devices Page - works now"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11013---2024-05-22---do-not-use---broken",children:"1.101.3 - 2024-05-22 - DO NOT USE - BROKEN"}),"\n",(0,n.jsx)(d.h2,{id:"11012---2024-05-16",children:"1.101.2 - 2024-05-16"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-14",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"reintruduced now fixed device ammount bubbles"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11011---2024-05-16",children:"1.101.1 - 2024-05-16"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-15",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Gormstore: ignored scope in device count query"}),"\n",(0,n.jsx)(d.li,{children:"Devices Page Navigation: use correct scope on device count query"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11010---2024-05-15",children:"1.101.0 - 2024-05-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-3",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Display wMBus key fingerprints in the key table, searchable to find the key used to decrypt a telegram"}),"\n",(0,n.jsx)(d.li,{children:"Device Types Menu shows device types with count and allows order by count or alphabetically"}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"Record.setTimeField()"}),"to set the name of a custom time field in each output record, works for batch records as well","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["This field is then used to set the time of each record, instead of the default ",(0,n.jsx)(d.code,{children:"time"})," field or ",(0,n.jsx)(d.code,{children:"receivedAt"})," field"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-12",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated mbus lib to v1.11.2"}),"\n",(0,n.jsx)(d.li,{children:"Output of key fingerprint in parsed telegram output"}),"\n",(0,n.jsx)(d.li,{children:"Reworked Device Types Menu on left side of Device Types and Data Page"}),"\n",(0,n.jsx)(d.li,{children:"Logging raw telegram + key fingerprint if parser panics"}),"\n",(0,n.jsx)(d.li,{children:"Devices Import Dialog now shows the organisation of an existing device"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"deprecated",children:"Deprecated"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"Record.setTime()"}),", as it doesn't work for batch record returns","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Use ",(0,n.jsx)(d.code,{children:"Record.setTimeField()"})," so set the name of a custom time field in each output record instead"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-16",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Panic when OMS parsing via API fails, logging errors and info, and returning nil instead"}),"\n",(0,n.jsx)(d.li,{children:"Logging app and org id values"}),"\n",(0,n.jsx)(d.li,{children:"JSON logging without HTML escaping"}),"\n",(0,n.jsx)(d.li,{children:"keyExchangePlatform import: inform user when there was no new key at exchange platform"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11000---2024-05-07",children:"1.100.0 - 2024-05-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-4",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added menu to display/hide columns in the device (experimental) table. The configuration is saved per user and device type."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-17",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"When exporting devices, only selected Devices will be exported."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1996---2024-04-30",children:"1.99.6 - 2024-04-30"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-18",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices Page: frontend crash on empty deviceType Device Table Config cols array"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-13",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Batch uplinks: If parsing fails, individual errors will be returned for each uplink, and the successful ones will be stored and processed"}),"\n",(0,n.jsx)(d.li,{children:"Use pipeline store to fetch device info for parsing and CoAP: For better performance it only preloads the certificate, and includes only a limited number of columns. If caching is enabled, it will cache the device data there."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1995---2024-04-23",children:"1.99.5 - 2024-04-23"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-19",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device table fallback to default table config, if none is present"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1994---2024-04-22",children:"1.99.4 - 2024-04-22"}),"\n",(0,n.jsx)(d.h3,{id:"changed-14",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Silence housekeeping for organisations without data retention limits in DB log"}),"\n",(0,n.jsx)(d.li,{children:"Searchable Cron log table"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-20",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"NaN"}),"replacement for customer parser (slice of maps was not handled correctly)"]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1993---2024-04-16",children:"1.99.3 - 2024-04-16"}),"\n",(0,n.jsx)(d.h3,{id:"changed-15",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Pipeline: always load device from DB before parsing and never take it from msg object"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-21",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update MBus lib to v1.10.0, fixing Qundis failed decryption, but parsing encrypted payload issue"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1992---2024-04-16",children:"v1.99.2 - 2024-04-16"}),"\n",(0,n.jsx)(d.h2,{id:"added-5",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"New (ant) table design in the devices tab. (Can be activated via the profile settings)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"changed-16",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices query returns a devicesResult object, containing a devices array and pagination info, instead of an array of devices"}),"\n",(0,n.jsx)(d.li,{children:"Pre-select current organisation when creating new users via Organisation section"}),"\n",(0,n.jsxs)(d.li,{children:["Replacing all ",(0,n.jsx)(d.code,{children:"NaN"})," values in parsed output, device config and properties updates with ",(0,n.jsx)(d.code,{children:"null"})," for JSON compatibility"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-22",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["wMBus key import from exchange platform: Only import ",(0,n.jsx)(d.code,{children:"END_USE"})," keys"]}),"\n",(0,n.jsx)(d.li,{children:"dont crash on nil nats connection ins NATS Client Service."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1991---2024-04-08",children:"v1.99.1 - 2024-04-08"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-23",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Key field usage with org key store in wmbus parser page"}),"\n",(0,n.jsx)(d.li,{children:"fixed DB connection string logging"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1990---2024-04-03",children:"v1.99.0 - 2024-04-03"}),"\n",(0,n.jsx)(d.h3,{id:"added-6",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added metrics for Stream sizes to prometheus"}),"\n",(0,n.jsx)(d.li,{children:"Slow Queries are now also logged in JSON format"}),"\n",(0,n.jsx)(d.li,{children:"Metric gorm_query_duration_seconds to trace Query Duration for different query types"}),"\n",(0,n.jsxs)(d.li,{children:["Output format options for HTTP integrations","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"JSON object (default)"}),"\n",(0,n.jsx)(d.li,{children:"JSON Array (wrapping a JSON object)"}),"\n",(0,n.jsx)(d.li,{children:"URL-encoded JSON (with customizable key)"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-17",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"NATS based pipeline metric names for prometheus were cleaned up"}),"\n",(0,n.jsxs)(d.li,{children:["When Parser runtime is exceeded and parser can not be interrupted shut down the server again","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Create CPU and memory profile before shutdown"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.li,{children:"Updated to GoLang v1.22.2"}),"\n",(0,n.jsx)(d.li,{children:"Updated MBus Parser to v1.9.0"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-24",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"GraphQL query in wMBus parser tab updated to ensure org keystore is used when option is ticked"}),"\n",(0,n.jsx)(d.li,{children:"Update device in cache after parsing properties or config values"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1981---2024-04-02",children:"v1.98.1 - 2024-04-02"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-25",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"JetStream messages are all acked, else they stay inside the stream"}),"\n",(0,n.jsx)(d.li,{children:"URL Escaping for DB Connection string"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-18",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated mbus parser lib to v1.8.0"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1980---2024-04-02",children:"v1.98.0 - 2024-04-02"}),"\n",(0,n.jsx)(d.h3,{id:"changed-19",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"NATS is using JetStream to persist Queue items"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-26",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Key Import (exchange platform) use start param"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1971---2024-03-28",children:"v1.97.1 - 2024-03-28"}),"\n",(0,n.jsx)(d.h3,{id:"added-7",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Integration Individual Log Limits for Success and Error"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-20",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Deivces are not cached during uplink handling (Config: Database.Cache.deviceExpirationSec)"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-27",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Stop startup of nats client when other service failed"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1970---2024-03-26",children:"v1.97.0 - 2024-03-26"}),"\n",(0,n.jsx)(d.h3,{id:"db-migrations",children:"DB Migrations"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.strong,{children:"ATTENTION"}),": Contains long running DB transformation (on startup)","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Migrations: 74"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-8",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Uplinks can be searched by their type"}),"\n",(0,n.jsx)(d.li,{children:"Uplinks can be filtered by created_at date"}),"\n",(0,n.jsx)(d.li,{children:"Slow Queries are now also logged in JSON"}),"\n",(0,n.jsx)(d.li,{children:"MQTT Integrations: Configurable Timeout"}),"\n",(0,n.jsx)(d.li,{children:"MQTT Integrations: Do not log executions option"}),"\n",(0,n.jsx)(d.li,{children:"HTTP Integrations: Do not log executions option"}),"\n",(0,n.jsx)(d.li,{children:"Configureable Ratelimit for Integration execution logging"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-21",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Removed quotes from text based logging"}),"\n",(0,n.jsx)(d.li,{children:"Device Type bulk operation entries link to the device's respective data page, as is the default for other device tables."}),"\n",(0,n.jsx)(d.li,{children:"Default Timeout for MQTT Integrations is now 10 seconds"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixes",children:"Fixes"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"JSON Log Format was not printing some fields"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1965---2024-03-12",children:"v1.96.5 - 2024-03-12"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-28",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"nats pending item metrics now published"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1964---2024-03-10",children:"v1.96.4 - 2024-03-10"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-29",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Cron runner for some nats metrics was not running"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1963---2024-03-07",children:"v1.96.3 - 2024-03-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-9",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Metrics for NATS pending messages nats_handle_device_uplink_pending, nats_integrations_pending"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-22",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Removed metric integration_queue_seconds"}),"\n",(0,n.jsx)(d.li,{children:"Table headers use no caps to make german umlaut better readable"}),"\n",(0,n.jsx)(d.li,{children:"Prefill device type when calling import from device page"}),"\n",(0,n.jsx)(d.li,{children:"Updated mbus parser lib to v1.7.0"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-30",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed a bug where a moving devices into another organisation via the bulk operation would display failed operations as successful"}),"\n",(0,n.jsx)(d.li,{children:"Device bulk operations from suborgs into parent/base org now work as expected"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1962---2024-03-04",children:"v1.96.2 - 2024-03-04"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-31",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"handle_integrations_seconds was not available"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1961---2024-03-04",children:"v1.96.1 - 2024-03-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-10",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Config parameters to set the amount of queue workers: nats.UplinkHandlerWorkers and nats.IntegrationHandlerWorkers"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-32",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Limit parallel execution of integrations"}),"\n",(0,n.jsx)(d.li,{children:"Do not shutdown platform when parser times out during heavy load"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1960---2024-02-27",children:"v1.96.0 - 2024-02-27"}),"\n",(0,n.jsx)(d.h3,{id:"added-11",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser updated to v1.6.4"}),"\n",(0,n.jsx)(d.li,{children:"wMbus key management allows to search for meterId and manufacturer at the same time"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-23",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"new button design for wMbus key management"}),"\n",(0,n.jsx)(d.li,{children:"Optimized query for parsed_data uses limit of 3500"}),"\n",(0,n.jsx)(d.li,{children:"csv import of wmbus keys is now more reliable"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1953---2024-02-27",children:"v1.95.3 - 2024-02-27"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-33",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"problem with temporary keys in organisation wmbus Keystore."}),"\n",(0,n.jsx)(d.li,{children:"Language selection based on two digit language code (ISO 639), ignoring possible following country code (ISO 3166). E.g.: 'en-US' will be read as 'en'"}),"\n",(0,n.jsx)(d.li,{children:"Link to hardware Activationpage in the top navigation for guests/not logged in users"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1952---2024-02-24",children:"v1.95.2 - 2024-02-24"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-34",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"added missing default store middelware to mbus handler stack"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1951---2024-02-24",children:"v1.95.1 - 2024-02-24"}),"\n",(0,n.jsx)(d.h3,{id:"added-12",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus key store usage on wmbus api in frontend"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-35",children:"Fixed"}),"\n",(0,n.jsx)(d.p,{children:"forgotten label on prometheus statistics increment that could lead to panic"}),"\n",(0,n.jsx)(d.h2,{id:"v1950---2024-02-24",children:"v1.95.0 - 2024-02-24"}),"\n",(0,n.jsx)(d.h3,{id:"added-13",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"loggedin Users (frontend and API used with token) can now use their organisations wmbus key store when using the wmbus API"}),"\n",(0,n.jsx)(d.li,{children:"Configurable amount of workers for parser"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-24",children:"Changed"}),"\n",(0,n.jsx)(d.p,{children:"limited parallel computing of wmbus API requests"}),"\n",(0,n.jsx)(d.h2,{id:"v1944---2024-02-21",children:"v1.94.4 - 2024-02-21"}),"\n",(0,n.jsx)(d.h3,{id:"added-14",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"prometheus monitoring for NATS Queues"}),"\n",(0,n.jsx)(d.li,{}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-25",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Optimization to reduce runtime of getParsedDataForOrg call via rest endpoint"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1943---2024-02-20",children:"v1.94.3 - 2024-02-20"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-36",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed nil pointer issues in the optimization of long-running queries in the data tab"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1942---2024-02-20---skipped-due-to-build-problems",children:"v1.94.2 - 2024-02-20 - SKIPPED DUE TO BUILD PROBLEMS"}),"\n",(0,n.jsx)(d.h3,{id:"changed-26",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Optimization to reduce runtime of some long-running queries in the data tab"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1941---2024-02-19",children:"v1.94.1 - 2024-02-19"}),"\n",(0,n.jsx)(d.h3,{id:"changed-27",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated to GoLang v1.22"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-37",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Data Tab did not load table config"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1940----2024-02-15",children:"v1.94.0 - 2024-02-15"}),"\n",(0,n.jsx)(d.h3,{id:"changed-28",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MBus lib: Update to 1.6.3"}),"\n",(0,n.jsx)(d.li,{children:"Otto JS runtime enviroment update to 0.3.0"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-38",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"sanitizing of unusual quote marks in downlink text input"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1931----2024-02-14",children:"v1.93.1 - 2024-02-14"}),"\n",(0,n.jsx)(d.h3,{id:"reverted",children:"Reverted"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Otto JS runtime enviroment update"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1930----2024-02-09",children:"v1.93.0 - 2024-02-09"}),"\n",(0,n.jsx)(d.h3,{id:"added-15",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Firmware page: copy downlink json button for common used firmware"}),"\n",(0,n.jsx)(d.li,{children:"log functions for js parsers"}),"\n",(0,n.jsx)(d.li,{children:"updated to otto 0.3.0"}),"\n",(0,n.jsx)(d.li,{children:'Sanitize \u201e,\u201c literals in downlink text input with " literal to avoid parsing errors.'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-29",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated Otto JS Runtime to v0.3.0"}),"\n",(0,n.jsx)(d.li,{children:"KeyExchangePlatform: Use API v2"}),"\n",(0,n.jsx)(d.li,{children:"KeyExchangePlatform: Display progress of key import"}),"\n",(0,n.jsx)(d.li,{children:"Improved performance of Data Page"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-39",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Creating new hardware for a device type that is private produced an invalid validation error"}),"\n",(0,n.jsx)(d.li,{children:"Fixed infinite spinner in device types data, when no data was returned from the server"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1920----2024-02-02",children:"v1.92.0 - 2024-02-02"}),"\n",(0,n.jsx)(d.h3,{id:"added-16",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"mbus Lib v1.6.2"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-30",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"on shutdown after Otto infinity loop input data are logged to enable debugging."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1911---2024-01-29",children:"v1.91.1 - 2024-01-29"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-40",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"coap handler: binary firmware updates total calculation offset of 1 fixed"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1910---2024-01-31",children:"v1.91.0 - 2024-01-31"}),"\n",(0,n.jsx)(d.h3,{id:"added-17",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Filter for default columns in device table"}),"\n",(0,n.jsx)(d.li,{children:"binary firmware files over coap now have address query Param"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1900---2024-01-26",children:"v1.90.0 - 2024-01-26"}),"\n",(0,n.jsx)(d.h3,{id:"added-18",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Basic support for binary firmware files over coap, e.g. for modem firmware updates"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-31",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DeviceType Import: current organisation is now preselected"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-41",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Firmware Cache removes file when deleted."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1890---2024-01-22",children:"v1.89.0 - 2024-01-22"}),"\n",(0,n.jsx)(d.h2,{id:"added-19",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Platform can now receive lobaro WMBUS Gateway uploads over MQTT"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1882---2024-01-19",children:"v1.88.2 - 2024-01-19"}),"\n",(0,n.jsx)(d.h2,{id:"fixed-42",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Issuses with the Lansen gateway information (MQTT topic LAS/W/I)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1881---2024-01-19",children:"v1.88.1 - 2024-01-19"}),"\n",(0,n.jsx)(d.h3,{id:"changed-32",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Type Selectors now can display up 25 matching device types"}),"\n",(0,n.jsx)(d.li,{children:"Search for device types now also looks for device type ID"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1880---2024-01-16",children:"v1.88.0 - 2024-01-16"}),"\n",(0,n.jsx)(d.h3,{id:"changed-33",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"updated to GoLang v1.21"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-20",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Platform can now receive Lansen WMBUS Gateway uploads over MQTT"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1871---2023-12-19",children:"v1.87.1 - 2023-12-19"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-43",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Missing store in context of async integrations"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1870---2023-12-19",children:"v1.87.0 - 2023-12-19"}),"\n",(0,n.jsx)(d.h3,{id:"changed-34",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Lobaro wMbus Api v1.5.14"}),"\n",(0,n.jsx)(d.li,{children:"org-admins can now also create, reschedule and delete downlinks for devices in their organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1860---2023-12-14",children:"v1.86.0 - 2023-12-14"}),"\n",(0,n.jsx)(d.h3,{id:"added-21",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow usage of shorter default RealData keys for parsing appropriate wMBus telegrams"}),"\n",(0,n.jsx)(d.li,{}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-44",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Creating new hardware for a device type that is private was not possible"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1850---2023-12-12",children:"v1.85.0 - 2023-12-12"}),"\n",(0,n.jsx)(d.h3,{id:"changed-35",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Lobaro mBus Lib v1.5.13"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-45",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"When importing a device type the data table config was set as the device table config"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1842---2023-12-11",children:"v1.84.2 - 2023-12-11"}),"\n",(0,n.jsx)(d.h3,{id:"changed-36",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["JSON Logging Environment variable is now: ",(0,n.jsx)(d.code,{children:"LOB_JSON_LOGGING"})]}),"\n",(0,n.jsx)(d.li,{children:"Also use structured logging for first line of log output when enabled"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1841---2023-12-11",children:"v1.84.1 - 2023-12-11"}),"\n",(0,n.jsx)(d.h3,{id:"note",children:"Note"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Broken release!"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1840---2023-12-07",children:"v1.84.0 - 2023-12-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-22",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Type Config Properties can be reordered"}),"\n",(0,n.jsx)(d.li,{children:"Tags can be searched in the Device page"}),"\n",(0,n.jsx)(d.li,{children:"Server logging in JSON format"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-46",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DeviceDetailPage link to devices page in header fixed"}),"\n",(0,n.jsx)(d.li,{children:"GraphQL Broken escaping for field value in custom filters"}),"\n",(0,n.jsx)(d.li,{children:"Broken Top Navigation after login/logout/user change"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1830---2023-12-04",children:"v1.83.0 - 2023-12-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-23",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Czech language"}),"\n",(0,n.jsx)(d.li,{children:"Device Type Import"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1821---2023-11-9",children:"v1.82.1 - 2023-11-9"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-47",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed error on GQL Device endpoint for devices that are not attached to a organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-37",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Suborg Statics and Page are no longer shown in Orgs without suborgs/the right to have suborgs"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1820---2023-10-24",children:"v1.82.0 - 2023-10-24"}),"\n",(0,n.jsx)(d.h3,{id:"added-24",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Usage Statistics can now be closed in an accordion with a persistant state"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1812---2023-10-23",children:"v1.81.2 - 2023-10-23"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-48",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed view downlink list was not possible when org_admin was viewing devices in a suborg"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1811---2023-10-08",children:"v1.81.1 - 2023-10-08"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-49",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed statistics now include devices from parent and sub orgs"}),"\n",(0,n.jsx)(d.li,{children:"Fixed a bug where device data could not be sorted by field"}),"\n",(0,n.jsx)(d.li,{children:"Updated permissions to allow admin, orgAdmin and deviceAdmin to create device downlinks"}),"\n",(0,n.jsx)(d.li,{children:"Fixed a bug where searching devices via their comments failed when the device comment was used to store id like strings (e.g. serial numbers)"}),"\n",(0,n.jsx)(d.li,{children:"Fixed a bug where the test input of a device setting did not show the latest device data and did not update after an uplink was simulated"}),"\n",(0,n.jsx)(d.li,{children:"When paginating devices that have no last received date, an arbitrary order (by internal id) will be used to preserve the pagination order"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-25",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Added "Organisation" selection to Device Settings Page'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1810---2023-10-02",children:"v1.81.0 - 2023-10-02"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-50",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed creating new users as non-admin, where a maxUsers limit was falsely shown to be reached"}),"\n",(0,n.jsx)(d.li,{children:"fixed updating the maxUser limit of an organisation"}),"\n",(0,n.jsx)(d.li,{children:"fixed a typo in the device-type copy resolver, that copied the 'data table config' into the 'device table config'"}),"\n",(0,n.jsx)(d.li,{children:"fixed a bug where subOrgs could not be displayed when an admin selects subOrgs in the devices page"}),"\n",(0,n.jsx)(d.li,{children:"fixed typos in german translation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-26",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"REST Endpoints for http integration management"}),"\n",(0,n.jsx)(d.li,{children:"Inform user about amount of ignored keys when importing from exchange platform"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-38",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"REST API: added panic catching middleware with extended logging on rest API handlers."}),"\n",(0,n.jsx)(d.li,{children:"create a device tag when focus is lost on the device/settings page"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1803---2023-08-19",children:"v1.80.3 - 2023-08-19"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-51",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow org-admin to switch bach to own base organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1802---2023-08-18",children:"v1.80.2 - 2023-08-18"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-52",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"typo that lead to error on devices Page"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1801---2023-08-18",children:"v1.80.1 - 2023-08-18"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-53",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"organisation edit in device settings"}),"\n",(0,n.jsx)(d.li,{children:"admins impersonating users can have problems with no longer assacibile scope for devices set"}),"\n",(0,n.jsx)(d.li,{children:"error on wmbus key edit."}),"\n",(0,n.jsx)(d.li,{}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-39",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'DeviceType Parser: Removed feature for "default" selection'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1800---2023-08-15",children:"v1.80.0 - 2023-08-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-27",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Example configuration is automatically generated with comments and default values"}),"\n",(0,n.jsx)(d.li,{children:"Device import on Devices Page in organisation"}),"\n",(0,n.jsx)(d.li,{children:"Configuration parameters for CoAP and CoAPs ports"}),"\n",(0,n.jsx)(d.li,{children:"CompactFrame Table: cut Values decimal places to exponent precision"}),"\n",(0,n.jsx)(d.li,{children:"Copy DeviceType feature"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-40",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wMbus AES Keys can now be displayed with masked middle"}),"\n",(0,n.jsx)(d.li,{children:"Devices Pages saves scope and selected device type in local storage"}),"\n",(0,n.jsx)(d.li,{children:"Removed unused components like customer specific prototypes"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-54",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"CertEnforceDtls only blocks requests without cert"}),"\n",(0,n.jsx)(d.li,{children:"fixed some frontend issue with wmbus key import from key exchange platform"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1791---2023-07-14",children:"v1.79.1 - 2023-07-14"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-55",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Org Admin can access device page"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1790---2023-07-13",children:"v1.79.0 - 2023-07-13"}),"\n",(0,n.jsx)(d.h3,{id:"added-28",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Bulk operation supports to change device organisation"}),"\n",(0,n.jsx)(d.li,{children:"Device Table can now display devices from scope: Organisation, Organisation With Suborgs and Global"}),"\n",(0,n.jsx)(d.li,{children:"search for empty meterId and manufacturer in WmbusKey Table"}),"\n",(0,n.jsx)(d.li,{children:'added is isnull filter for "is null" and "is not null" searches in filter API/GQL-filter'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-41",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Only admins can change the address of existing devices"}),"\n",(0,n.jsx)(d.li,{children:"Updates wmbus parser to v1.5.12 to fix parsing of Zenner invalid values"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1781---2023-07-05",children:"v1.78.1 - 2023-07-05"}),"\n",(0,n.jsx)(d.h3,{id:"added-29",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.strong,{children:"ATTENTION"}),": Contains long running DB transformation (on startup)"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-56",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Nats monitoring endpoint was not working"}),"\n",(0,n.jsx)(d.li,{children:"Properly handle server shutdown, do not hang up"}),"\n",(0,n.jsx)(d.li,{children:"Start monitoring immediately after startup and do not wait 30 seconds"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1770---2023-06-29",children:"v1.77.0 - 2023-06-29"}),"\n",(0,n.jsx)(d.h3,{id:"added-30",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"device certificates can now be deleted by admins/orgadmins/device-admins"}),"\n",(0,n.jsx)(d.li,{children:"Device DTLS Certs can now be deleted by admins, org-admins and device-admins"}),"\n",(0,n.jsx)(d.li,{children:"UsageStatistics Cron worker now also reports into the CronLog."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-42",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Actility datasource now uses network-server tokens, disabled old datasource concept in apps"}),"\n",(0,n.jsx)(d.li,{children:"Update mbus parser to v1.5.10 to fix compact profiles with invalid values"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1760---2023-06-22",children:"v1.76.0 - 2023-06-22"}),"\n",(0,n.jsx)(d.h3,{id:"added-31",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"device usage Statistics"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-43",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"retry mechanism for configuration downlinks on coap endpoints"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-57",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'dont display Hardware Activation Link under "Ogranisation" when Featureoggle is disabled'}),"\n",(0,n.jsx)(d.li,{children:"routing for Hardware Activation"}),"\n",(0,n.jsx)(d.li,{children:"browser back button on pages with redirects"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1754---2023-06-13",children:"v1.75.4 - 2023-06-13"}),"\n",(0,n.jsx)(d.h3,{id:"added-32",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"helpfull error message on failed wmbus key imports"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1753---2023-06-06",children:"v1.75.3 - 2023-06-06"}),"\n",(0,n.jsx)(d.h3,{id:"added-33",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus LIB v1.5.9"}),"\n",(0,n.jsx)(d.li,{children:"DbStats for prometheus metrics"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-58",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"detail pages in Configuration now also highlight the correct navigation item"}),"\n",(0,n.jsx)(d.li,{children:"missing edit button on max Sub Orgs for admins of Parentorganisation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1752---2023-06-02",children:"v1.75.2 - 2023-06-02"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-59",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"cpu usage statistics for prometheus metrics"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1751---2023-06-02",children:"v1.75.1 - 2023-06-02"}),"\n",(0,n.jsx)(d.h3,{id:"added-34",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"cpu usage every 10sec sampled for prometheus metrics"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1750---2023-06-01",children:"v1.75.0 - 2023-06-01"}),"\n",(0,n.jsx)(d.h3,{id:"added-35",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Monitoring Service with host stats for Prometheus Metrics"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1740---2023-05-31",children:"v1.74.0 - 2023-05-31"}),"\n",(0,n.jsx)(d.h3,{id:"added-36",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Key import from Key Exchange Platform"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"fixed-60",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"prohibit wmbus_key manufacturer entry to become empty string instead of null"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-44",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update to Go 1.20"}),"\n",(0,n.jsx)(d.li,{children:"extend coap/coaps prometheus monitoring"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-61",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"error page on password reset"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1730---2023-05-18",children:"v1.73.0 - 2023-05-18"}),"\n",(0,n.jsx)(d.h3,{id:"added-37",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Lobaro Mbus Lib v1.5.6"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-62",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"SensusRF Keys were not found on parsing in Key Store"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"change",children:"Change"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"move from github.com/dgrijalva/jwt-go to github.com/golang-jwt/jwt"}),"\n",(0,n.jsx)(d.li,{children:"removed no longer used last Keycloak auth features"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1720---2023-05-16",children:"v1.72.0 - 2023-05-16"}),"\n",(0,n.jsx)(d.h3,{id:"added-38",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"SubOrganisations in tenant management"}),"\n",(0,n.jsx)(d.li,{children:"API Endpoints for deletion of Devices ParsedData and SensorData"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-63",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Configuration Area: Broken Firmware Upload Form"}),"\n",(0,n.jsx)(d.li,{children:"navigation bar is not shown after login"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1719---2023-04-17",children:"v1.71.9 - 2023-04-17"}),"\n",(0,n.jsx)(d.h3,{id:"changed-45",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update wMbus Parser to v1.5.5"}),"\n",(0,n.jsx)(d.li,{children:"remove broken DeviceTable Edit from Device Table Page"}),"\n",(0,n.jsx)(d.li,{children:'Using "Clear" on Table Config editor now clears config but doesn\'t save clear action directly'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-64",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Search for data table fixed when searching for a prefix e.g. 'my prefix*'"}),"\n",(0,n.jsx)(d.li,{children:"Format errors in logs"}),"\n",(0,n.jsx)(d.li,{children:"Hardware Activation detail page was not loading"}),"\n",(0,n.jsx)(d.li,{children:"Create hardware activation"}),"\n",(0,n.jsx)(d.li,{children:"Create device type without Organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1717---2023-04-05",children:"v1.71.7 - 2023-04-05"}),"\n",(0,n.jsx)(d.h3,{id:"changed-46",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"removed sensitivity in wmbus key import table search"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1716---2023-04-05",children:"v1.71.6 - 2023-04-05"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-65",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"unneeded re-renderings and double query execution on Data Table"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1715---2023-04-04",children:"v1.71.5 - 2023-04-04"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-66",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DeviceType Parser in Device Parser Editor"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1714---2023-04-03",children:"v1.71.4 - 2023-04-03"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-67",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"mixups in Parser Editor"}),"\n",(0,n.jsx)(d.li,{children:"Path problems in configuration area that lead to error page"}),"\n",(0,n.jsx)(d.li,{children:"missing navigation highlighting"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1713---2023-03-30",children:"v1.71.3 - 2023-03-30"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-68",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"error on search for Wmbus_Keys with long Sensus Device Id."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1712---2023-03-28",children:"v1.71.2 - 2023-03-28"}),"\n",(0,n.jsx)(d.h3,{id:"changed-47",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"some more improvements for wmbus_key refactoring"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1711---2023-03-27",children:"v1.71.1 - 2023-03-27"}),"\n",(0,n.jsx)(d.h3,{id:"added-39",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"update to wmbus Lib v1.5.4"}),"\n",(0,n.jsx)(d.li,{children:"Additional saftey in wmbus_keys transformation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1702---2023-03-19",children:"v1.70.2 - 2023-03-19"}),"\n",(0,n.jsx)(d.h3,{id:"added-40",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Dragino TCP Endpoint for NB-IoT at port 5600"}),"\n",(0,n.jsx)(d.li,{children:"CoAP .well-known/core endpoint"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-48",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'wMbus API parameter "ident" renamed to "indent" as it was meant to be'}),"\n",(0,n.jsx)(d.li,{children:"removed bloated debug log that was introduced in v1.61.7"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1701---2023-02-15",children:"v1.70.1 - 2023-02-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-41",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus LIB v1.5.3"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-69",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"out of index error in parser for lansen v3 co2 sensors"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1700---2023-02-01",children:"v1.70.0 - 2023-02-01"}),"\n",(0,n.jsx)(d.h3,{id:"added-42",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus LIB v1.5.2"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1641---2023-01-30",children:"v1.64.1 - 2023-01-30"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-70",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'race condition in HTTP integration that lead to "context canceled" before msg was published over http'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1640---2023-01-17",children:"v1.64.0 - 2023-01-17"}),"\n",(0,n.jsx)(d.h3,{id:"changed-49",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MBUS Lib updated to v1.5.1"}),"\n",(0,n.jsx)(d.li,{children:"HTTP integrations now run asynchronous in background"}),"\n",(0,n.jsx)(d.li,{children:"CompactFrame now uses EU Date Format."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-71",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"long running http integration blocks COAP call"}),"\n",(0,n.jsx)(d.li,{children:"white labeling on swagger API documentation improved"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1630---2022-12-07",children:"v1.63.0 - 2022-12-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-43",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus LIB v1.5.0"}),"\n",(0,n.jsx)(d.li,{children:"CompactProfile Support"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-50",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Domain Model endpoint meterData will work with empty body and use default Configuration from mbus lib"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-72",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"missing fields in Device Export"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1621---2022-11-25",children:"v1.62.1 - 2022-11-25"}),"\n",(0,n.jsx)(d.h3,{id:"added-44",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Timezone feature for date Handelbar helper"}),"\n",(0,n.jsx)(d.li,{children:"Support TimeString and Epoch in Handelbar date helper"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1617---2022-11-23",children:"v1.61.7 - 2022-11-23"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-73",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed mbus parser error on to short key ids in organisation key store."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1616---2022-11-23",children:"v1.61.6 - 2022-11-23"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-74",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Out of Index error on humanize of Lansen Co2 Meters with failed decryption."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1615---2022-11-18",children:"1.61.5 - 2022-11-18"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-75",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"moved lobaro-cron-validate dependency from github to npm repo"}),"\n",(0,n.jsx)(d.li,{children:"DeviceConfig: lobaro-cron-validate to support L and W (as Lists) on"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1612---2022-11-15",children:"v1.61.2 - 2022-11-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-45",children:"Added"}),"\n",(0,n.jsx)(d.p,{children:"_ wmbus LIB v1.4.2"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus: Lansen Co2 Sensors added DB Ambience level to DomainModel"}),"\n",(0,n.jsx)(d.li,{children:"meaningful error on decryption failure for DomainModel"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-76",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DomainModel: fixed missing MeterId for Multisensors (in specific: Lansen CO2)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1611---2022-11-04",children:"v1.61.1 - 2022-11-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-46",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus: Lansen Co2 Sensors added DB Ambience level to DomainModel"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-51",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser Lib updated to v1.4.1"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1610---2022-11-04",children:"v1.61.0 - 2022-11-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-47",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus: Subunit is now displayed for wmbus telegrams"}),"\n",(0,n.jsx)(d.li,{children:"wmbus: Lansen Co2 Sensors are now supported by he DomainModel"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-52",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser Lib updated to v1.4.0"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-77",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus: SubUnit and Tariff"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1600---2022-10-13",children:"v1.60.0 - 2022-10-13"}),"\n",(0,n.jsx)(d.h3,{id:"added-48",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"CONFIG CHANGES FOR DTLS CERTS NEEDED (see changed)"}),"\n",(0,n.jsx)(d.li,{children:"Mqtt Integration now also displays the publishInformation for the last execution where an error occurred"}),"\n",(0,n.jsx)(d.li,{children:"Cron validation support for: Last Day Of Week (L for Weekday), Nearest Week Day (W for weekday param), Last Day Of Month (L and L-x for day of month param)"}),"\n",(0,n.jsx)(d.li,{children:"support for raw downlinks over coap to Lobaro NB-IoT Devices"}),"\n",(0,n.jsx)(d.li,{children:"Link Device Type in Device Header (on Device pages) with Device Type page"}),"\n",(0,n.jsx)(d.li,{children:"Device Bulk operation: Export Hardware csv for devices"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-53",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser Lib updated to 1.2.3"}),"\n",(0,n.jsx)(d.li,{children:"removed config Value featureToggle.dtlsSecureCoapServiceEnabled"}),"\n",(0,n.jsx)(d.li,{children:"SecureCoapService is now started when server.dtlsConfig.dtlsCertDir and server.dtlsConfig.dtlsCertDir are set"}),"\n",(0,n.jsx)(d.li,{children:"Removed server.dtlsConfig.dtlsCertDir and server.dtlsConfig.dtlsCertName no longer have default Values"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-78",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"double 0x-prefixon wmbus Device Type at Application Layer for long header"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1590---2022-10-05",children:"v1.59.0 - 2022-10-05"}),"\n",(0,n.jsx)(d.h3,{id:"added-49",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Rest API: update Device"}),"\n",(0,n.jsx)(d.li,{children:"Fields to copy&paste GPS location for devices"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-79",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MQTT Integration UI: fix empty string displayed as QosByte instead of 0"}),"\n",(0,n.jsx)(d.li,{children:"MQTT Integration UI: edit on Retained Flag not saved correctly"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1581---2022-09-30",children:"v1.58.1 - 2022-09-30"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-80",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"GQL Schema for build"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1580---2022-09-30",children:"v1.58.0 - 2022-09-30"}),"\n",(0,n.jsx)(d.h3,{id:"added-50",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added QosBytes and retained Flag to MQTT integrations"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-54",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'DeviceType "makePrivate" now sets Org automatically if no org is set on deviceType'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1570---2022-09-23",children:"v1.57.0 - 2022-09-23"}),"\n",(0,n.jsx)(d.h3,{id:"added-51",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"delete device endpoint in REST API"}),"\n",(0,n.jsx)(d.li,{children:"org bulkoperation: change devicetype"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-81",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"CSV-Export of Devices from DeviceTable had no access to device properties"}),"\n",(0,n.jsx)(d.li,{children:"Org-Admin cant edit DeviceType Parser and Tables of own deviceType (private)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1560---2022-09-20",children:"v1.56.0 - 2022-09-20"}),"\n",(0,n.jsx)(d.h3,{id:"added-52",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'wmbus key store can now contain MFields as "Meter Id" so the key is used for all devices of a manufacturer'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-82",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'wmbus key import from csv destroyed entrys with "*" als Meter Id'}),"\n",(0,n.jsx)(d.li,{children:"removed Unknown property '_grid' for div component in Grid Component because it caused react/no-unknown-property rule to fail builds"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1550---2022-08-09",children:"v1.55.0 - 2022-08-09"}),"\n",(0,n.jsx)(d.h3,{id:"added-53",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"ATTENTION: Contains DB Transformations"}),"\n",(0,n.jsx)(d.li,{children:"Display Telegram Types on uplinks"}),"\n",(0,n.jsx)(d.li,{children:"more translations"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-55",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"sharped private device types"}),"\n",(0,n.jsx)(d.li,{children:"unique Device Addr (DB transformation can interrupt startup on failure!)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1541---2022-08-09",children:"v1.54.1 - 2022-08-09"}),"\n",(0,n.jsx)(d.h3,{id:"added-54",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"configurable ConnectionPool limits for Gorm DB Connection"}),"\n",(0,n.jsx)(d.li,{children:"added LastError Information for HTTP integrations"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1540---2022-08-09-yanked",children:"v1.54.0 - 2022-08-09 [YANKED]"}),"\n",(0,n.jsx)(d.h3,{id:"added-55",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"configurable ConnectionPool limits for Gorm DB Connection"}),"\n",(0,n.jsx)(d.li,{children:"added LastError Information for HTTP integrations"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1531---2022-08-05",children:"v1.53.1 - 2022-08-05"}),"\n",(0,n.jsx)(d.h3,{id:"changed-56",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated mbus Parser to v1.2.2"}),"\n",(0,n.jsx)(d.li,{children:"mbus Parser: Support for wired M-Bus Headers"}),"\n",(0,n.jsx)(d.li,{children:"mbus Parser: Support for Enhanced Identification Block"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-56",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MQTT Integrations can now listen for downlinks over MQTT"}),"\n",(0,n.jsx)(d.li,{children:'Handlebars "replace" helper'}),"\n",(0,n.jsx)(d.li,{children:"Handlebars config helper"}),"\n",(0,n.jsx)(d.li,{children:"Replay Device Data feature"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-83",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"org-admins can create password reset links and change pws of users (in same org)"}),"\n",(0,n.jsx)(d.li,{children:"org-admins can send password set emails for users (in same org)"}),"\n",(0,n.jsx)(d.li,{children:"fixed redirect on user creation in organisation menu"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1522---2022-07-28",children:"v1.52.2 - 2022-07-28"}),"\n",(0,n.jsx)(d.h3,{id:"changed-57",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'also sort devices table by deviceType on "last received"'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1520---2022-07-25",children:"v1.52.0 - 2022-07-25"}),"\n",(0,n.jsx)(d.h3,{id:"added-57",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Chirpstack join info as uplink"}),"\n",(0,n.jsx)(d.li,{children:'"in" operator for filters (text elem in array)'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-84",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Filters for the Devices Table from the Device Table Configuration of DeviceTypes"}),"\n",(0,n.jsx)(d.li,{children:"Import of big hardwareCSV files"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1511---2022-07-04",children:"v1.51.1 - 2022-07-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-58",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"max User Limit for organisations (first steps)"}),"\n",(0,n.jsx)(d.li,{children:"lorawan downlinks"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-58",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"API Tokens now can have the Roles Device-Admin and Org-Admin."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-85",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"removal of device ConfigValues removes them from the initial config also"}),"\n",(0,n.jsx)(d.li,{children:"base64 encoded telegrams are correctly handeled by the frontend now"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1490---2022-06-20",children:"v1.49.0 - 2022-06-20"}),"\n",(0,n.jsx)(d.h3,{id:"added-59",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"config values that are not part of deviceType schema can be removed from device"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-86",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser page: Base64 telegrams are now converted to base64url to fix parsing on base64 telegram with +,/ and ="}),"\n",(0,n.jsx)(d.li,{children:"broken password change on password change page"}),"\n",(0,n.jsx)(d.li,{children:"password could get broken by Ampersand on transport"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1480---2022-06-15",children:"v1.48.0 - 2022-06-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-60",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"org admins can create and manage users in their organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-87",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Firmware Management page: missing refetches, unwanted uuid in file name is no longer added"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1470---2022-06-13",children:"v1.47.0 - 2022-06-13"}),"\n",(0,n.jsx)(d.h3,{id:"added-61",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Bulk creation of Downlinks for Devices."}),"\n",(0,n.jsx)(d.li,{children:"Firmware File Management (upload/deletion..) page for Platform Admins"}),"\n",(0,n.jsx)(d.li,{children:"Api Endpoints for device and user creation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-59",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Selection box at top of Table now always adds all unmarked elements to exiting selection"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1462---2022-05-18",children:"v1.46.2 - 2022-05-18"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-88",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fix blockwise transport with coap server v2.5.0k"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1461---2022-05-18",children:"v1.46.1 - 2022-05-18"}),"\n",(0,n.jsx)(d.h3,{id:"changed-60",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"updated mbus parser for M\xfcllerRF bugfixes"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1460---2022-05-18",children:"v1.46.0 - 2022-05-18"}),"\n",(0,n.jsx)(d.h3,{id:"added-62",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'parser support for "mbus" and "M\xfcllerRF" frames'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1452---2022-05-13",children:"v1.45.2 - 2022-05-13"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-89",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Blockwise CoAP upload by rolling back to coap server v2.3.0"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1451---2022-05-11",children:"v1.45.1 - 2022-05-11"}),"\n",(0,n.jsx)(d.h3,{id:"added-63",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added gzip compression support to REST API and GraphQL"}),"\n",(0,n.jsx)(d.li,{children:"Allow integrations to access device Serial, Id, Name, Addr, and OrgId in URL / Topic"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1432---2022-05-09",children:"v1.43.2 - 2022-05-09"}),"\n",(0,n.jsx)(d.h3,{id:"changed-61",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"increase default and max pagination limit to 100.000"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-90",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"csv download uses pagination"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1431---2022-05-08",children:"v1.43.1 - 2022-05-08"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-91",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fix localization files path"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1430---2022-05-06",children:"v1.43.0 - 2022-05-06"}),"\n",(0,n.jsx)(d.h3,{id:"changed-62",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"enforce max Page size of 1000 items"}),"\n",(0,n.jsx)(d.li,{children:"use of default page size when no pagination config is supplied on request"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1420---2022-05-05",children:"v1.42.0 - 2022-05-05"}),"\n",(0,n.jsx)(d.h3,{id:"added-64",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"language files will be loaded from filesystem on startup"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1412---2022-05-04",children:"v1.41.2 - 2022-05-04"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-92",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["api param ",(0,n.jsx)(d.code,{children:"ident"})," corrected to ",(0,n.jsx)(d.code,{children:"indent"})]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1411---2022-05-03",children:"v1.41.1 - 2022-05-03"}),"\n",(0,n.jsx)(d.h3,{id:"changed-63",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"update mbus lib to fix parsing of invalid and negativ BCD numbers"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1410---2022-05-02",children:"v1.41.0 - 2022-05-02"}),"\n",(0,n.jsx)(d.h3,{id:"added-65",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"pprof endpoints"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-64",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"pass context of gql query to gorm for big querys so gorm can cancel execution in ctx.Done"}),"\n",(0,n.jsx)(d.li,{children:"updated GqlGen to v0.17.5"}),"\n",(0,n.jsx)(d.li,{children:"Log Warning on querys with more than 10.000 results"}),"\n",(0,n.jsx)(d.li,{children:"Error on Querys with more than 100.000 results"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-93",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Missing page parameter in initial query org/device/parsedData"}),"\n",(0,n.jsx)(d.li,{children:"high memory consumption during CoAP fw update"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-66",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"added ident param to endpoints of REST API"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1401---2022-04-28",children:"v1.40.1 - 2022-04-28"}),"\n",(0,n.jsx)(d.h3,{id:"added-67",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"added ident flag for api/mbus"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-94",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"frontend crash on device tag edit"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1400---2022-04-28",children:"v1.40.0 - 2022-04-28"}),"\n",(0,n.jsx)(d.h3,{id:"added-68",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DatasourceString so the technical source of a Uplink can be identified"}),"\n",(0,n.jsx)(d.li,{children:"Users can be deleted by admins"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-65",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Org is now required on user generation"}),"\n",(0,n.jsx)(d.li,{children:"improved space for dropdown selection in user creation modal"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1390---2022-04-25",children:"v1.39.0 - 2022-04-25"}),"\n",(0,n.jsx)(d.h3,{id:"added-69",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DTLS: configure if a device can fallback to unsecure coap in frontend"}),"\n",(0,n.jsx)(d.li,{children:"trim white spaces in config values"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-66",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"new mbus Parser Lib version (1.0.0) with fixed Storage Numbers"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1380---2022-04-25",children:"v1.38.0 - 2022-04-25"}),"\n",(0,n.jsx)(d.h3,{id:"added-70",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"roles field in user creation modal"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-67",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"login is set to email address for new users"}),"\n",(0,n.jsx)(d.li,{children:"Change color of admin role pills to red background"}),"\n",(0,n.jsx)(d.li,{children:"Fallback to nonsecure DTLS can be allowed for device"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-95",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"scrollbar for org chooser in user creation modal is presented for long org lists"}),"\n",(0,n.jsx)(d.li,{children:"DTLS: Lost updates on device (config/properties) for all Messages beside the last one on dtls connection"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1370---2022-04-21",children:"v1.37.0 - 2022-04-21"}),"\n",(0,n.jsx)(d.h3,{id:"changed-68",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"update CoAP implementation to v2.5.0"}),"\n",(0,n.jsx)(d.li,{children:"adjusted flight time for dtls handshake"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1360---2022-04-20",children:"v1.36.0 - 2022-04-20"}),"\n",(0,n.jsx)(d.h3,{id:"added-71",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"basic prometheus statistics for GraphQL API"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-69",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"updated PION DTLS to v2.1.3 to fix potential deadlock bug"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1350---2022-04-19",children:"v1.35.0 - 2022-04-19"}),"\n",(0,n.jsx)(d.h3,{id:"added-72",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added TLS support for MQTT integrations"}),"\n",(0,n.jsx)(d.li,{children:"Allow Variable Substitution in MQTT Topic"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-70",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update to GoLang 1.18"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-96",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MQTT publish leads to DB update error without information"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1340---2022-03-29",children:"v1.34.0 - 2022-03-29"}),"\n",(0,n.jsx)(d.h3,{id:"changed-71",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"make Database sslmode configurable"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-97",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"improved cron evaluation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1331---2022-03-24",children:"v1.33.1 - 2022-03-24"}),"\n",(0,n.jsx)(d.h3,{id:"changed-72",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"removed possible logging of Auth Header at TTN endpoint"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-98",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"look in to forwarded for Header Entry for mbus API requests IP ratelimeting"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1330---2022-03-23",children:"v1.33.0 - 2022-03-23"}),"\n",(0,n.jsx)(d.h3,{id:"added-73",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"count Access by IP on mbus API"}),"\n",(0,n.jsx)(d.li,{children:"monitor push integrations (mqtt/http) with prometheus"}),"\n",(0,n.jsx)(d.li,{children:"favicon can be configured in branding configuration"}),"\n",(0,n.jsx)(d.li,{children:"Device Config Form: config values with type CRON are now validated an error displayed on invalid crons"}),"\n",(0,n.jsx)(d.li,{children:'Translate hardcoded column names in global "Data" table'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-73",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"distinguish timeout and error returned by parser in parser monitoring"}),"\n",(0,n.jsx)(d.li,{children:"removed AppLauncher in Top Navigation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1321---2022-03-04",children:"v1.32.1 - 2022-03-04"}),"\n",(0,n.jsx)(d.h3,{id:"changed-74",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Change DTLS config to request Extended Master Secret, instead of requiring it."}),"\n",(0,n.jsx)(d.li,{children:"Wrap Pion-Logger to Logrus, so that messages from DTLS-lib show up in log."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1320---2022-03-01",children:"v1.32.0 - 2022-03-01"}),"\n",(0,n.jsx)(d.h3,{id:"changed-75",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"COAP FW update: Use file table to look up files instead of metadata from filesystem"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-74",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Prometheus statistics for COAP Endpoint Runtimes and JS Parser Runtime"}),"\n",(0,n.jsx)(d.li,{children:'role "monitoring" protect prometheus endpoint with auth for admin or monitoring role'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-99",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"crash on sort click in Tables without default sort (data table)"}),"\n",(0,n.jsx)(d.li,{children:"DTLS parse EUI64 from device if EUI64 URN is presented instead of fail because of wrong IMEI URN"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1310---2022-02-17",children:"v1.31.0 - 2022-02-17"}),"\n",(0,n.jsx)(d.h3,{id:"added-75",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"new mbus Parser Lib Version can parse EiElectronics Smoke Detector HeadStatus content"}),"\n",(0,n.jsx)(d.li,{children:"On Panic in go-coap handler routine give Internal Server Error to client instead of killing the routine"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-100",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"sort no longer breaks on multiple change of sort direction"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-76",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Logg "Handle CoAP request" only as Debug because it spams the log'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1300---2022-02-08",children:"v1.30.0 - 2022-02-08"}),"\n",(0,n.jsx)(d.h3,{id:"changed-77",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated to Go lang 1.17.6"}),"\n",(0,n.jsx)(d.li,{children:"Updated gqlgen and some other dependency's for Go Lang 1.17 update"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1292---2022-02-07",children:"v1.29.2 - 2022-02-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-76",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Show number of devices in organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-78",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"CSV Imports (Keys, Hardware, Config Values) now skip empty lines in the csv file"}),"\n",(0,n.jsx)(d.li,{children:"Devices in Organisation Device List are now sorted by Last Received (descending)"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-101",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed bug that prevented admins to see the overview of devices without an organisation"}),"\n",(0,n.jsx)(d.li,{children:"CronLog issues"}),"\n",(0,n.jsx)(d.li,{children:"sort in tables never sorted descending on default sort"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1291---2022-02-02",children:"v1.29.1 - 2022-02-02"}),"\n",(0,n.jsx)(d.h3,{id:"added-77",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"API Endpoint for MeterReading Domain Model"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-102",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Link to devices Types from Admin hardware Page"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1290---skipped-due-to-problems-with-build",children:"1.29.0 - skipped due to problems with build"}),"\n",(0,n.jsx)(d.h2,{id:"v1281---2022-01-14",children:"v1.28.1 - 2022-01-14"}),"\n",(0,n.jsx)(d.h3,{id:"added-78",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Http Integration: Validate Token and add hint if "Bearer " needs to be removed'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-79",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"remote device Config: truncate Spaces on Import from CSV"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-103",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"even admins where permited to update global device types"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1280---2022-01-12",children:"v1.28.0 - 2022-01-12"}),"\n",(0,n.jsx)(d.h3,{id:"added-79",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"array Filter Operators for GraphQL Querys with filter added"}),"\n",(0,n.jsx)(d.li,{children:"schedule uplink button at top of device config table"}),"\n",(0,n.jsx)(d.li,{children:"REST API: Admin Endpoints for API Token Creation and Deletion"}),"\n",(0,n.jsx)(d.li,{children:"REST API: GetDeviceDownlinks"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-80",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"only admins can see admins in organisation user List"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-104",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DTLS COAP: Fixed blocked accept() on dtls Listener after connection close by Handshake timeout and use of Multiple Threads."}),"\n",(0,n.jsx)(d.li,{children:"Filters where no longer applied after table page was changed"}),"\n",(0,n.jsx)(d.li,{children:"show usefully hint instead of JS error when user opens detail page of non exiting device or device he is not allowed to inspect"}),"\n",(0,n.jsx)(d.li,{children:"DeviceType Config Properties: Display Name no longer marked as required"}),"\n",(0,n.jsx)(d.li,{children:"UpdateDeviceType bug fixed: Orgadmins cloud not update private Device Types"}),"\n",(0,n.jsx)(d.li,{children:"wrong and annoying autofocus in downlink editor."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1272---2021-12-16",children:"v1.27.2 - 2021-12-16"}),"\n",(0,n.jsx)(d.h3,{id:"added-80",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"25h caching for Firmware files"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-105",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'SensusRF Ids will no longer spam the log as "invalid mbus id"'}),"\n",(0,n.jsx)(d.li,{children:"Housekeeping: fixed logging that can lead to nil pointer dereference"}),"\n",(0,n.jsx)(d.li,{children:"wmbus Data fixed some ugly UI case with missing new line"}),"\n",(0,n.jsx)(d.li,{children:"Integration Filters with empty Device Type List displayed all Device Types in frontend"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1271---2021-12-02",children:"v1.27.1 - 2021-12-02"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-106",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Housekeeping changed wrong DB Column Types in CronLog Table"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1270---2021-12-01",children:"v1.27.0 - 2021-12-01"}),"\n",(0,n.jsx)(d.h3,{id:"added-81",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added Housekeeping for SensorData and ParsedData"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-81",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"JS Parser timeout default increased to 250ms and timeout is now configurable."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-107",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Hadware Activation: correction of initialConfig=null handling"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1261---2021-11-30",children:"v1.26.1 - 2021-11-30"}),"\n",(0,n.jsx)(d.h3,{id:"added-82",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Undocumented REST endpoint to schedule downlinks ",(0,n.jsx)(d.code,{children:"POST /api/devices/{devId}/downlink?type=raw"})]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1260---2021-11-30",children:"v1.26.0 - 2021-11-30"}),"\n",(0,n.jsx)(d.h3,{id:"added-83",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Support for Tekelek downlinks via TCP/IP"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1250---2021-11-15",children:"v1.25.0 - 2021-11-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-84",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Support to filter array fields from REST API e.g. devices by tags"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1240---2021-11-12",children:"v1.24.0 - 2021-11-12"}),"\n",(0,n.jsx)(d.h3,{id:"added-85",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Filter for MQTT Integrations"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-108",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fix TTN Integration Base64 decoding"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1230---2021-11-04",children:"v1.23.0 - 2021-11-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-86",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Cert registration for Lobaro Devices"}),"\n",(0,n.jsx)(d.li,{children:"MeteringData for wmbus devices"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1223---2021-10-15",children:"v1.22.3 - 2021-10-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-87",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus: Display Decrypted Raw Body on telegrams where Body can not be parsed yet"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-109",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Configuration CSV Import: Fixed that Header Column was also imported as value"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1220---2021-10-11",children:"v1.22.0 - 2021-10-11"}),"\n",(0,n.jsx)(d.h3,{id:"added-88",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Reschedule downlinks"}),"\n",(0,n.jsx)(d.li,{children:"Deletion of queued downlinks"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-110",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Wrong Regex prevented to add SensusRF keys with SensusRF meterId."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1210---2021-10-11",children:"v1.21.0 - 2021-10-11"}),"\n",(0,n.jsx)(d.h3,{id:"added-89",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'New Role "Device Admin" that is allowed all operations at devices of his organisation'}),"\n",(0,n.jsx)(d.li,{children:"Descriptive Name Column for Device configuration properties"}),"\n",(0,n.jsx)(d.li,{children:"Feature Toggle to configure if wmbus Parser API is public"}),"\n",(0,n.jsx)(d.li,{children:"Enabled users to change the language manually in frontend"}),"\n",(0,n.jsx)(d.li,{children:"Admins can create Downlinks with arbitrary JSON Data content."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-82",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"show more details about messages that cant be parsed (header/payload unparsable)"}),"\n",(0,n.jsx)(d.li,{children:"enhanced sftp Integration logging"}),"\n",(0,n.jsx)(d.li,{}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-111",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed some small UI details"}),"\n",(0,n.jsx)(d.li,{children:"Device -> Settings -> Parser displays the parser correctly again"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1200---2021-09-30",children:"v1.20.0 - 2021-09-30"}),"\n",(0,n.jsx)(d.h3,{id:"added-90",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus keys CSV import: hints and example file"}),"\n",(0,n.jsx)(d.li,{children:"SFTP Integration: Group By Device Tags"}),"\n",(0,n.jsx)(d.li,{children:"wmbusParser Api Tab Feature Toggle"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-112",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Use of Filter and Sort in Parsed Data Tables could lead to lose if Filters"}),"\n",(0,n.jsx)(d.li,{children:"some translation errors (DE Translation)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1195---2021-09-28",children:"v1.19.5 - 2021-09-28"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-113",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"missing german translations"}),"\n",(0,n.jsx)(d.li,{children:"Device config cancel button behaviour"}),"\n",(0,n.jsx)(d.li,{children:"API authentication for a customer specific endpoint"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1194---2021-09-24",children:"v1.19.4 - 2021-09-24"}),"\n",(0,n.jsx)(d.h3,{id:"added-91",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"translation for mouseover text on battery symbol"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-83",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"User tables now contain the list of roles given to the user"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-114",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"CSV import of wmbus AES Keys"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1193---2021-09-23",children:"v1.19.3 - 2021-09-23"}),"\n",(0,n.jsx)(d.h3,{id:"added-92",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Long header information are now displayed in wmbus detail component"}),"\n",(0,n.jsx)(d.li,{children:"feature toggle: hardware activation"}),"\n",(0,n.jsx)(d.li,{children:"header column in config value csv import is now optional by user choice"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-115",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"bugs that lead to keys missing after key import from csv"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1192---2021-09-20",children:"v1.19.2 - 2021-09-20"}),"\n",(0,n.jsx)(d.h3,{id:"changed-84",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Qundis Proprietary telegrams are now marked as such"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-116",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Data Tables now show BodyParseErrors on wmbus Detail component"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1191---2021-09-19",children:"v1.19.1 - 2021-09-19"}),"\n",(0,n.jsx)(d.h3,{id:"added-93",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Battery Symbol in Organisation "All" Devices overview'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-117",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"bugs on sftp integration (front and backend)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1183---2021-09-13",children:"v1.18.3 - 2021-09-13"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-118",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed File upload in GQL (organisation Logo and so on...)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1182---2021-09-09",children:"v1.18.2 - 2021-09-09"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-119",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"organisation key store check for App and Link Layer IDs on key search"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1181---2021-09-09",children:"v1.18.1 - 2021-09-09"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-120",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Mode 7 Bug with short header fixed"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1180---2021-09-07",children:"v1.18.0 - 2021-09-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-94",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Column filters for tables (text and boolean)"}),"\n",(0,n.jsx)(d.li,{children:"Admin area: Hardware Battery page (vbat table)"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-85",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"sort/filter: dots ons property names can now be protected by quotes"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-121",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wahr/falsch translations in DE where mixed up"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1174---2021-09-01",children:"v1.17.4 - 2021-09-01"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-122",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"removed broken Host/URL/Ip parsing in Sftp integration."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1173---2021-08-31",children:"v1.17.3 - 2021-08-31"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-123",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wrong port tried by sftp integration"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1172---2021-08-30",children:"v1.17.2 - 2021-08-30"}),"\n",(0,n.jsx)(d.h3,{id:"changed-86",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"added some missing translations"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-124",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"auth failure for actility"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1171---2021-08-30",children:"v1.17.1 - 2021-08-30"}),"\n",(0,n.jsx)(d.h3,{id:"changed-87",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Reworked Parser Device.getConfig"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1170---2021-08-30",children:"v1.17.0 - 2021-08-30"}),"\n",(0,n.jsx)(d.h3,{id:"added-95",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Localisation Framework added to code"}),"\n",(0,n.jsx)(d.li,{children:"German localisation added"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-88",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Old Device Config is now accessible in the Parser"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-125",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Error on update of SFTP Integration fixed"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1160---2021-08-18",children:"v1.16.0 - 2021-08-18"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"JSParser: Device Name, Address, Serial and Tags are now accessible."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1152---2021-08-18",children:"v1.15.2 - 2021-08-18"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"createMQTTIntegration fix ClientId in username"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1151---2021-08-16",children:"v1.15.1 - 2021-08-16"}),"\n",(0,n.jsx)(d.h3,{id:"added-96",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Config: Import Lists from CSV"}),"\n",(0,n.jsx)(d.li,{children:"Added Rest Admin Endpoints"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-89",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added more options for selectable CRONs in remote config"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1141---2021-08-03",children:"v1.14.1 - 2021-08-03"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-126",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"nil pointer dereference bug on http Integration"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1140---2021-08-02",children:"v1.14.0 - 2021-08-02"}),"\n",(0,n.jsx)(d.h3,{id:"changed-90",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Gorm update"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-97",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added Support for Compact Telegrams without DifVif FormatFrame"}),"\n",(0,n.jsx)(d.li,{children:"Device Bulk Edit: Devices Org can be edited to no Org."}),"\n",(0,n.jsx)(d.li,{children:"DTLS Support for NB-IoT Devices over COAP"}),"\n",(0,n.jsx)(d.li,{children:"Info Endpoint"}),"\n",(0,n.jsx)(d.li,{children:"Health Endpoint added"}),"\n",(0,n.jsx)(d.li,{children:"Tekelek devices get the suggested answer."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-127",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Error on HTTP Integration Edit without Auth."}),"\n",(0,n.jsx)(d.li,{children:"Crash on HTTP Integration with nil response from HTTP lib."}),"\n",(0,n.jsx)(d.li,{children:"Device Bulk Edit: Frontend crash when device without Org is edited."}),"\n",(0,n.jsx)(d.li,{children:"Security issue in Rest API fixed."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1132---2021-07-09",children:"v1.13.2 - 2021-07-09"}),"\n",(0,n.jsx)(d.h3,{id:"added-98",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Tekelek Device Support on TCP connection added. (Default port: 54345)"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-91",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"search for devices now considers serial"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-128",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"some drone issues"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1123---2021-07-02",children:"v1.12.3 - 2021-07-02"}),"\n",(0,n.jsx)(d.h3,{id:"change-1",children:"Change"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"dont check if dev exist for EUI assignment."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1122---2021-07-02",children:"v1.12.2 - 2021-07-02"}),"\n",(0,n.jsx)(d.h3,{id:"changed-92",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"updated Lobaro mbus Parser Lib to new Version"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-129",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"error on hardware import without org fixed"}),"\n",(0,n.jsx)(d.li,{children:"wrong visual representation for device config values of type ByteArray and value null"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11200---2021-06-15",children:"v1.12.00 - 2021-06-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-99",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Tagging for Devices"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11117---2021-06-14",children:"v1.11.17 - 2021-06-14"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-130",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"restart Platform on service crash (like coap service and so on)"}),"\n",(0,n.jsx)(d.li,{children:"TTN: Fix on TTN User Agent version mapping"}),"\n",(0,n.jsx)(d.li,{children:"log config paths, name and type to be loaded"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11116---2021-05-26",children:"v1.11.16 - 2021-05-26"}),"\n",(0,n.jsx)(d.h3,{id:"added-100",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"validate Device config Params based on Data Type in DeviceType Schema"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-131",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"ByteArray Config Values of NB-IoT Devices are now displayed in Hex (and not in base64)"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-93",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DeviceTypes can now be created by users."}),"\n",(0,n.jsx)(d.li,{children:"Enabled users to share DeviceTypes with all organisations (public/private DeviceTypes)"}),"\n",(0,n.jsx)(d.li,{children:"wmbus Telegram Field picker for Data Table Config"}),"\n",(0,n.jsx)(d.li,{children:"Table preview in Data Table Config"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11112---2021-05-11",children:"v1.11.12 - 2021-05-11"}),"\n",(0,n.jsx)(d.h3,{id:"added-101",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"TheThingsNetwork V3 is now supported."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11111---2021-04-26",children:"v1.11.11 - 2021-04-26"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-132",children:"fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"integrations now forward all parser outputs (not only the last)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11110---2021-04-23",children:"v1.11.10 - 2021-04-23"}),"\n",(0,n.jsx)(d.h3,{id:"added-102",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Always decreypt PulseRf devices"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-94",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"new Time Selection UI Element"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11109---2021-04-xx",children:"v1.11.09 - 2021-04-xx"}),"\n",(0,n.jsx)(d.h3,{id:"added-103",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"user list is now sortable by different values (default: lastLogin)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1118---2021-04-15",children:"v1.11.8 - 2021-04-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-104",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added first version of SFTP csv export."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-95",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"display table filter by default"}),"\n",(0,n.jsx)(d.li,{children:"filter for data of last 90 days by default"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-133",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed some issues with the time filter in the Data Tab."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1116---2021-03-31",children:"v1.11.6 - 2021-03-31"}),"\n",(0,n.jsx)(d.h3,{id:"changed-96",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Tableconfig Data Tables: Values can now be configured to be part of the csv export but not to be shown in the table."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1115---2021-03-22",children:"v1.11.5 - 2021-03-22"}),"\n",(0,n.jsx)(d.h3,{id:"added-105",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow deletion of Properties from Device."}),"\n",(0,n.jsx)(d.li,{children:"Allow org Admins to delete device Data."}),"\n",(0,n.jsx)(d.li,{children:"Activation Page with all devices of organisation added."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-97",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"to hex parsing for byte fields at coap endpoint deactivated for further fixing"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1114---2021-03-16",children:"v1.11.4 - 2021-03-16"}),"\n",(0,n.jsx)(d.h3,{id:"added-106",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices which have an DevEUI Assignment connected to its address now display the EUI in ther detail Headers."}),"\n",(0,n.jsx)(d.li,{children:"COAP Messages: byte fields in payload are now converted to hex instead of base64."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-98",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"(wmbus)Key import from csv now pads to short keys with leading zeros"}),"\n",(0,n.jsx)(d.li,{children:"trim whitespaces on config values so they can no longer be added accidentally"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-134",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"corrupt cache.bin no longer crashes service on startup"}),"\n",(0,n.jsx)(d.li,{children:"org-admin are now allowed to see users in org"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1110---2021-03-03",children:"v1.11.0 - 2021-03-03"}),"\n",(0,n.jsx)(d.h3,{id:"added-107",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Frontend is now delivered by lobaro backend."}),"\n",(0,n.jsx)(d.li,{children:"Support for NB-IoT Gateways receiving Data over lorawan with DevEUI instead if IMEI as used Address"}),"\n",(0,n.jsx)(d.li,{children:"NB-IOT wmbus gateway devices will now receive lorawan messages also in the Device created with the IMEI as address"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1107---2021-02-26",children:"v1.10.7 - 2021-02-26"}),"\n",(0,n.jsx)(d.h3,{id:"changed-99",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Display Error texts instead of error mask for SensusRF"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1106---2021-02-18",children:"v1.10.6 - 2021-02-18"}),"\n",(0,n.jsx)(d.h3,{id:"added-108",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Support for Chirpstack Version: 3+ Api"}),"\n",(0,n.jsx)(d.li,{children:"Chirpstack v3+ protobuf support"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-135",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"SensusRF Padding Problem for long Serials"}),"\n",(0,n.jsx)(d.li,{children:"fixed Bug in unconfigurable DevEUI Blocks"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1102---2021-02-13",children:"v1.10.2 - 2021-02-13"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-136",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Display Meterdevice ID and Error Text for SensusRF parsing run without matching key"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1101---2021-02-12",children:"v1.10.1 - 2021-02-12"}),"\n",(0,n.jsx)(d.h3,{id:"added-109",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Registry for Lobaro (Device)-EUIs added"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-100",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Userlist search now also includes Organisation Name"}),"\n",(0,n.jsx)(d.li,{children:"Unused Firefly and PackageRoute Stores removed"}),"\n",(0,n.jsx)(d.li,{children:"Unused columns and indexes removed"}),"\n",(0,n.jsx)(d.li,{children:"Index unification over Platform instances"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-137",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed Bug preventing to delete Organisations with attached mbus keys"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1100---2021-02-08",children:"v1.10.0 - 2021-02-08"}),"\n",(0,n.jsx)(d.h3,{id:"added-110",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Integrate SensusRF parsing into wmbus API"}),"\n",(0,n.jsx)(d.li,{children:"Link parsed data with uplinks"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-101",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser now also supports Base64 input"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-138",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Improved authentication role checks"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v192---2021-01-25",children:"v1.9.2 - 2021-01-25"}),"\n",(0,n.jsx)(d.h3,{id:"added-111",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Serial Numbers are now imported from hardware csv and can be seen in the platform."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"191---2021-01-15",children:"1.9.1 - 2021-01-15"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-139",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"mqtt service startup failure"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v191---2021-01-13",children:"v1.9.1 - 2021-01-13"}),"\n",(0,n.jsx)(d.h3,{id:"added-112",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Endpoint for Loriot LoRaWAN Network Server at /api/loriot/data"}),"\n",(0,n.jsx)(d.li,{children:"Configuration for server.dataDir (Default: './data')"}),"\n",(0,n.jsx)(d.li,{children:"Branding configuration: The frontend only shows customer brand specific links, logos etc."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-102",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Parser cache is persisted regularly (60 seconds) and on graceful shutdown"}),"\n",(0,n.jsx)(d.li,{children:"Parser cache is loaded from file on startup"}),"\n",(0,n.jsxs)(d.li,{children:["Parser cache file is located at ",(0,n.jsx)(d.code,{children:"/parser/cache.bin"})]}),"\n",(0,n.jsxs)(d.li,{children:["From ",(0,n.jsx)(d.code,{children:""})," dir only '/app' and '/org' folders are public via HTTP to avoid leaking other data files like the parser cache"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-140",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Server crash related to MQTT Publish Integration"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v187---2020-09-29",children:"v1.8.7 - 2020-09-29"}),"\n",(0,n.jsx)(d.h3,{id:"added-113",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"last login field for user"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-141",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Server now using CoAP port from config"}),"\n",(0,n.jsx)(d.li,{children:"Server does depend require Keycloak during startup"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v185---2020-09-08",children:"v1.8.5 - 2020-09-08"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-142",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Deduplication of CoAP messages for blockwise requests"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v184---2020-09-02",children:"v1.8.4 - 2020-09-02"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-143",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Index row size for device textsearch was too big"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v183---2020-08-28",children:"v1.8.3 - 2020-08-28"}),"\n",(0,n.jsx)(d.h3,{id:"added-114",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["REST API to update device configurations: ",(0,n.jsx)(d.code,{children:"/api/devices/{devId}/config"})]}),"\n",(0,n.jsx)(d.li,{children:"REST API to fetch all parsed data of all devices inside an organisation: /api/devices/parsed-data"}),"\n",(0,n.jsxs)(d.li,{children:["HTTP Integration now supports URL Variable substitution for the device ID via ",(0,n.jsx)(d.code,{children:"{device.id}"})," and data via ",(0,n.jsx)(d.code,{children:"{data.some.value}"})]}),"\n",(0,n.jsx)(d.li,{children:"Internal API and Schema for integration input filters"}),"\n",(0,n.jsx)(d.li,{children:"BasicAuth credentials for API Tokens as alternative authorization mechanism in the REST API"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-103",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update to latest version of mbus parser to fix description issues with some telegrams"}),"\n",(0,n.jsx)(d.li,{children:"Drop unused database tables and APIs from legacy projects"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v170---2020-06-04",children:"v1.7.0 - 2020-06-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-115",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow sending user invitation mails with password reset link"}),"\n",(0,n.jsx)(d.li,{children:"Allow user to restore a lost password"}),"\n",(0,n.jsx)(d.li,{children:"GraphQL API: Devices can be filtered by DeviceTypeId"}),"\n",(0,n.jsx)(d.li,{children:"Verify that server.frontendUrl is set in configuration"}),"\n",(0,n.jsx)(d.li,{children:"Add TTN REST Endpoint /api/ttn/data"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-104",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Prevent spaces in device addresses"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v160---2020-04-09",children:"v1.6.0 - 2020-04-09"}),"\n",(0,n.jsx)(d.h3,{id:"added-116",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow org-admin to edit wmbus Keys"}),"\n",(0,n.jsx)(d.li,{children:"Allow org-admin to upload organisation logos"}),"\n",(0,n.jsxs)(d.li,{children:["Documentation for REST API endpoint ",(0,n.jsx)(d.code,{children:"/api/devices"})]}),"\n",(0,n.jsx)(d.li,{children:"Parser: Record.getReceivedAt() to access the uplink message received_at date"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-105",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Chirpstack device synchronisation reports more details"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"removed-1",children:"Removed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Gateway entity that is no longer used"}),"\n",(0,n.jsx)(d.li,{children:"Hardcoded MQTT publishers that are no longer used"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-144",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow to remove App in device via GraphQL API"}),"\n",(0,n.jsx)(d.li,{children:"NB-IoT Data is saved for all matching devices, not just one"}),"\n",(0,n.jsx)(d.li,{children:"Downlink messages created_at was set to null after update"}),"\n",(0,n.jsx)(d.li,{children:"Allow to update config values that are not defined in Device Type"}),"\n",(0,n.jsx)(d.li,{children:"Allow org-Admin to edit wmbus Keys"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v150",children:"v1.5.0"}),"\n",(0,n.jsx)(d.h3,{id:"added-117",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Synchronization of devices with Chirpstack"}),"\n"]})]})}function v(e={}){const{wrapper:d}={...(0,l.R)(),...e.components};return d?(0,n.jsx)(d,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},8453:(e,d,i)=>{i.d(d,{R:()=>r,x:()=>a});var n=i(6540);const l={},s=n.createContext(l);function r(e){const d=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function a(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),n.createElement(s.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba9c1b43.ca421e66.js b/assets/js/ba9c1b43.ca421e66.js new file mode 100644 index 00000000..765328ff --- /dev/null +++ b/assets/js/ba9c1b43.ca421e66.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[346],{4375:(e,d,i)=>{i.r(d),i.d(d,{assets:()=>h,contentTitle:()=>r,default:()=>v,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var n=i(4848),l=i(8453);const s={},r="Changelog",a={id:"platform/administration/changelog",title:"Changelog",description:"Application: Lobaro Backend",source:"@site/docs/platform/administration/changelog.md",sourceDirName:"platform/administration",slug:"/platform/administration/changelog",permalink:"/iot/platform/administration/changelog",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/changelog.md",tags:[],version:"current",frontMatter:{},sidebar:"allDocSidebar",previous:{title:"Administration",permalink:"/iot/platform/administration/"},next:{title:"Datasources",permalink:"/iot/platform/administration/datasources"}},h={},c=[{value:"1.104.5 - 2024-06-24",id:"11045---2024-06-24",level:2},{value:"Changed",id:"changed",level:3},{value:"1.104.4 - 2024-06-24",id:"11044---2024-06-24",level:2},{value:"Fixed",id:"fixed",level:3},{value:"1.104.3 - 2024-06-24",id:"11043---2024-06-24",level:2},{value:"Changed",id:"changed-1",level:3},{value:"Fixed",id:"fixed-1",level:3},{value:"1.104.2 - 2024-06-19",id:"11042---2024-06-19",level:2},{value:"Fixed",id:"fixed-2",level:3},{value:"1.104.1 - 2024-06-19",id:"11041---2024-06-19",level:2},{value:"Changed",id:"changed-2",level:3},{value:"1.104.0 - 2024-06-18",id:"11040---2024-06-18",level:2},{value:"Added",id:"added",level:3},{value:"Changed",id:"changed-3",level:3},{value:"1.103.3 - 2024-06-12",id:"11033---2024-06-12",level:2},{value:"Fixed",id:"fixed-3",level:3},{value:"1.103.2 - 2024-06-11",id:"11032---2024-06-11",level:2},{value:"Fixed",id:"fixed-4",level:3},{value:"1.103.1 - 2024-06-11",id:"11031---2024-06-11",level:2},{value:"Changed",id:"changed-4",level:3},{value:"Fixed",id:"fixed-5",level:3},{value:"1.103.0 - 2024-06-11",id:"11030---2024-06-11",level:2},{value:"Fixed",id:"fixed-6",level:3},{value:"Changed",id:"changed-5",level:3},{value:"1.102.3 - 2024-06-06",id:"11023---2024-06-06",level:2},{value:"Fixed",id:"fixed-7",level:3},{value:"1.102.2 - 2024-06-04",id:"11022---2024-06-04",level:2},{value:"Fixed",id:"fixed-8",level:3},{value:"1.102.1 - 2024-06-04",id:"11021---2024-06-04",level:2},{value:"Fixed",id:"fixed-9",level:3},{value:"1.102.0 - 2024-06-04",id:"11020---2024-06-04",level:2},{value:"Changed",id:"changed-6",level:3},{value:"Added",id:"added-1",level:3},{value:"1.101.10 - 2024-05-25",id:"110110---2024-05-25",level:2},{value:"Fixed",id:"fixed-10",level:3},{value:"Changed",id:"changed-7",level:3},{value:"1.101.9 - 2024-05-24",id:"11019---2024-05-24",level:2},{value:"Fixed",id:"fixed-11",level:3},{value:"1.101.8 - 2024-05-24",id:"11018---2024-05-24",level:2},{value:"Changed",id:"changed-8",level:3},{value:"1.101.7 - 2024-05-24",id:"11017---2024-05-24",level:2},{value:"Added",id:"added-2",level:3},{value:"Changed",id:"changed-9",level:3},{value:"Removed",id:"removed",level:3},{value:"1.101.6 - 2024-05-22",id:"11016---2024-05-22",level:2},{value:"Changed",id:"changed-10",level:3},{value:"1.101.5 - 2024-05-22",id:"11015---2024-05-22",level:2},{value:"Changed",id:"changed-11",level:3},{value:"Fixed",id:"fixed-12",level:3},{value:"1.101.4 - 2024-05-22",id:"11014---2024-05-22",level:2},{value:"Fixed",id:"fixed-13",level:3},{value:"1.101.3 - 2024-05-22 - DO NOT USE - BROKEN",id:"11013---2024-05-22---do-not-use---broken",level:2},{value:"1.101.2 - 2024-05-16",id:"11012---2024-05-16",level:2},{value:"Fixed",id:"fixed-14",level:3},{value:"1.101.1 - 2024-05-16",id:"11011---2024-05-16",level:2},{value:"Fixed",id:"fixed-15",level:3},{value:"1.101.0 - 2024-05-15",id:"11010---2024-05-15",level:2},{value:"Added",id:"added-3",level:3},{value:"Changed",id:"changed-12",level:3},{value:"Deprecated",id:"deprecated",level:3},{value:"Fixed",id:"fixed-16",level:3},{value:"1.100.0 - 2024-05-07",id:"11000---2024-05-07",level:2},{value:"Added",id:"added-4",level:3},{value:"Fixed",id:"fixed-17",level:3},{value:"1.99.6 - 2024-04-30",id:"1996---2024-04-30",level:2},{value:"Fixed",id:"fixed-18",level:3},{value:"Changed",id:"changed-13",level:3},{value:"1.99.5 - 2024-04-23",id:"1995---2024-04-23",level:2},{value:"Fixed",id:"fixed-19",level:3},{value:"1.99.4 - 2024-04-22",id:"1994---2024-04-22",level:2},{value:"Changed",id:"changed-14",level:3},{value:"Fixed",id:"fixed-20",level:3},{value:"1.99.3 - 2024-04-16",id:"1993---2024-04-16",level:2},{value:"Changed",id:"changed-15",level:3},{value:"Fixed",id:"fixed-21",level:3},{value:"v1.99.2 - 2024-04-16",id:"v1992---2024-04-16",level:2},{value:"Added",id:"added-5",level:2},{value:"Changed",id:"changed-16",level:2},{value:"Fixed",id:"fixed-22",level:3},{value:"v1.99.1 - 2024-04-08",id:"v1991---2024-04-08",level:2},{value:"Fixed",id:"fixed-23",level:3},{value:"v1.99.0 - 2024-04-03",id:"v1990---2024-04-03",level:2},{value:"Added",id:"added-6",level:3},{value:"Changed",id:"changed-17",level:3},{value:"Fixed",id:"fixed-24",level:3},{value:"v1.98.1 - 2024-04-02",id:"v1981---2024-04-02",level:2},{value:"Fixed",id:"fixed-25",level:3},{value:"Changed",id:"changed-18",level:3},{value:"v1.98.0 - 2024-04-02",id:"v1980---2024-04-02",level:2},{value:"Changed",id:"changed-19",level:3},{value:"Fixed",id:"fixed-26",level:3},{value:"v1.97.1 - 2024-03-28",id:"v1971---2024-03-28",level:2},{value:"Added",id:"added-7",level:3},{value:"Changed",id:"changed-20",level:3},{value:"Fixed",id:"fixed-27",level:3},{value:"v1.97.0 - 2024-03-26",id:"v1970---2024-03-26",level:2},{value:"DB Migrations",id:"db-migrations",level:3},{value:"Added",id:"added-8",level:3},{value:"Changed",id:"changed-21",level:3},{value:"Fixes",id:"fixes",level:3},{value:"v1.96.5 - 2024-03-12",id:"v1965---2024-03-12",level:2},{value:"Fixed",id:"fixed-28",level:3},{value:"v1.96.4 - 2024-03-10",id:"v1964---2024-03-10",level:2},{value:"Fixed",id:"fixed-29",level:3},{value:"v1.96.3 - 2024-03-07",id:"v1963---2024-03-07",level:2},{value:"Added",id:"added-9",level:3},{value:"Changed",id:"changed-22",level:3},{value:"Fixed",id:"fixed-30",level:3},{value:"v1.96.2 - 2024-03-04",id:"v1962---2024-03-04",level:2},{value:"Fixed",id:"fixed-31",level:3},{value:"v1.96.1 - 2024-03-04",id:"v1961---2024-03-04",level:2},{value:"Added",id:"added-10",level:3},{value:"Fixed",id:"fixed-32",level:3},{value:"v1.96.0 - 2024-02-27",id:"v1960---2024-02-27",level:2},{value:"Added",id:"added-11",level:3},{value:"Changed",id:"changed-23",level:3},{value:"v1.95.3 - 2024-02-27",id:"v1953---2024-02-27",level:2},{value:"Fixed",id:"fixed-33",level:3},{value:"v1.95.2 - 2024-02-24",id:"v1952---2024-02-24",level:2},{value:"Fixed",id:"fixed-34",level:3},{value:"v1.95.1 - 2024-02-24",id:"v1951---2024-02-24",level:2},{value:"Added",id:"added-12",level:3},{value:"Fixed",id:"fixed-35",level:3},{value:"v1.95.0 - 2024-02-24",id:"v1950---2024-02-24",level:2},{value:"Added",id:"added-13",level:3},{value:"Changed",id:"changed-24",level:3},{value:"v1.94.4 - 2024-02-21",id:"v1944---2024-02-21",level:2},{value:"Added",id:"added-14",level:3},{value:"Changed",id:"changed-25",level:3},{value:"v1.94.3 - 2024-02-20",id:"v1943---2024-02-20",level:2},{value:"Fixed",id:"fixed-36",level:3},{value:"v1.94.2 - 2024-02-20 - SKIPPED DUE TO BUILD PROBLEMS",id:"v1942---2024-02-20---skipped-due-to-build-problems",level:2},{value:"Changed",id:"changed-26",level:3},{value:"v1.94.1 - 2024-02-19",id:"v1941---2024-02-19",level:2},{value:"Changed",id:"changed-27",level:3},{value:"Fixed",id:"fixed-37",level:3},{value:"v1.94.0 - 2024-02-15",id:"v1940----2024-02-15",level:2},{value:"Changed",id:"changed-28",level:3},{value:"Fixed",id:"fixed-38",level:3},{value:"v1.93.1 - 2024-02-14",id:"v1931----2024-02-14",level:2},{value:"Reverted",id:"reverted",level:3},{value:"v1.93.0 - 2024-02-09",id:"v1930----2024-02-09",level:2},{value:"Added",id:"added-15",level:3},{value:"Changed",id:"changed-29",level:3},{value:"Fixed",id:"fixed-39",level:3},{value:"v1.92.0 - 2024-02-02",id:"v1920----2024-02-02",level:2},{value:"Added",id:"added-16",level:3},{value:"Changed",id:"changed-30",level:3},{value:"v1.91.1 - 2024-01-29",id:"v1911---2024-01-29",level:2},{value:"Fixed",id:"fixed-40",level:3},{value:"v1.91.0 - 2024-01-31",id:"v1910---2024-01-31",level:2},{value:"Added",id:"added-17",level:3},{value:"v1.90.0 - 2024-01-26",id:"v1900---2024-01-26",level:2},{value:"Added",id:"added-18",level:3},{value:"Changed",id:"changed-31",level:3},{value:"Fixed",id:"fixed-41",level:3},{value:"v1.89.0 - 2024-01-22",id:"v1890---2024-01-22",level:2},{value:"Added",id:"added-19",level:2},{value:"v1.88.2 - 2024-01-19",id:"v1882---2024-01-19",level:2},{value:"Fixed",id:"fixed-42",level:2},{value:"v1.88.1 - 2024-01-19",id:"v1881---2024-01-19",level:2},{value:"Changed",id:"changed-32",level:3},{value:"v1.88.0 - 2024-01-16",id:"v1880---2024-01-16",level:2},{value:"Changed",id:"changed-33",level:3},{value:"Added",id:"added-20",level:3},{value:"v1.87.1 - 2023-12-19",id:"v1871---2023-12-19",level:2},{value:"Fixed",id:"fixed-43",level:3},{value:"v1.87.0 - 2023-12-19",id:"v1870---2023-12-19",level:2},{value:"Changed",id:"changed-34",level:3},{value:"v1.86.0 - 2023-12-14",id:"v1860---2023-12-14",level:2},{value:"Added",id:"added-21",level:3},{value:"Fixed",id:"fixed-44",level:3},{value:"v1.85.0 - 2023-12-12",id:"v1850---2023-12-12",level:2},{value:"Changed",id:"changed-35",level:3},{value:"Fixed",id:"fixed-45",level:3},{value:"v1.84.2 - 2023-12-11",id:"v1842---2023-12-11",level:2},{value:"Changed",id:"changed-36",level:3},{value:"v1.84.1 - 2023-12-11",id:"v1841---2023-12-11",level:2},{value:"Note",id:"note",level:3},{value:"v1.84.0 - 2023-12-07",id:"v1840---2023-12-07",level:2},{value:"Added",id:"added-22",level:3},{value:"Fixed",id:"fixed-46",level:3},{value:"v1.83.0 - 2023-12-04",id:"v1830---2023-12-04",level:2},{value:"Added",id:"added-23",level:3},{value:"v1.82.1 - 2023-11-9",id:"v1821---2023-11-9",level:2},{value:"Fixed",id:"fixed-47",level:3},{value:"Changed",id:"changed-37",level:3},{value:"v1.82.0 - 2023-10-24",id:"v1820---2023-10-24",level:2},{value:"Added",id:"added-24",level:3},{value:"v1.81.2 - 2023-10-23",id:"v1812---2023-10-23",level:2},{value:"Fixed",id:"fixed-48",level:3},{value:"v1.81.1 - 2023-10-08",id:"v1811---2023-10-08",level:2},{value:"Fixed",id:"fixed-49",level:3},{value:"Added",id:"added-25",level:3},{value:"v1.81.0 - 2023-10-02",id:"v1810---2023-10-02",level:2},{value:"Fixed",id:"fixed-50",level:3},{value:"Added",id:"added-26",level:3},{value:"Changed",id:"changed-38",level:3},{value:"v1.80.3 - 2023-08-19",id:"v1803---2023-08-19",level:2},{value:"Fixed",id:"fixed-51",level:3},{value:"v1.80.2 - 2023-08-18",id:"v1802---2023-08-18",level:2},{value:"Fixed",id:"fixed-52",level:3},{value:"v1.80.1 - 2023-08-18",id:"v1801---2023-08-18",level:2},{value:"Fixed",id:"fixed-53",level:3},{value:"Changed",id:"changed-39",level:3},{value:"v1.80.0 - 2023-08-15",id:"v1800---2023-08-15",level:2},{value:"Added",id:"added-27",level:3},{value:"Changed",id:"changed-40",level:3},{value:"Fixed",id:"fixed-54",level:3},{value:"v1.79.1 - 2023-07-14",id:"v1791---2023-07-14",level:2},{value:"Fixed",id:"fixed-55",level:3},{value:"v1.79.0 - 2023-07-13",id:"v1790---2023-07-13",level:2},{value:"Added",id:"added-28",level:3},{value:"Changed",id:"changed-41",level:3},{value:"v1.78.1 - 2023-07-05",id:"v1781---2023-07-05",level:2},{value:"Added",id:"added-29",level:3},{value:"Fixed",id:"fixed-56",level:3},{value:"v1.77.0 - 2023-06-29",id:"v1770---2023-06-29",level:2},{value:"Added",id:"added-30",level:3},{value:"Changed",id:"changed-42",level:3},{value:"v1.76.0 - 2023-06-22",id:"v1760---2023-06-22",level:2},{value:"Added",id:"added-31",level:3},{value:"Changed",id:"changed-43",level:3},{value:"Fixed",id:"fixed-57",level:3},{value:"v1.75.4 - 2023-06-13",id:"v1754---2023-06-13",level:2},{value:"Added",id:"added-32",level:3},{value:"v1.75.3 - 2023-06-06",id:"v1753---2023-06-06",level:2},{value:"Added",id:"added-33",level:3},{value:"Fixed",id:"fixed-58",level:3},{value:"v1.75.2 - 2023-06-02",id:"v1752---2023-06-02",level:2},{value:"Fixed",id:"fixed-59",level:3},{value:"v1.75.1 - 2023-06-02",id:"v1751---2023-06-02",level:2},{value:"Added",id:"added-34",level:3},{value:"v1.75.0 - 2023-06-01",id:"v1750---2023-06-01",level:2},{value:"Added",id:"added-35",level:3},{value:"v1.74.0 - 2023-05-31",id:"v1740---2023-05-31",level:2},{value:"Added",id:"added-36",level:3},{value:"Fixed",id:"fixed-60",level:2},{value:"Changed",id:"changed-44",level:3},{value:"Fixed",id:"fixed-61",level:3},{value:"v1.73.0 - 2023-05-18",id:"v1730---2023-05-18",level:2},{value:"Added",id:"added-37",level:3},{value:"Fixed",id:"fixed-62",level:3},{value:"Change",id:"change",level:3},{value:"v1.72.0 - 2023-05-16",id:"v1720---2023-05-16",level:2},{value:"Added",id:"added-38",level:3},{value:"Fixed",id:"fixed-63",level:3},{value:"v1.71.9 - 2023-04-17",id:"v1719---2023-04-17",level:2},{value:"Changed",id:"changed-45",level:3},{value:"Fixed",id:"fixed-64",level:3},{value:"v1.71.7 - 2023-04-05",id:"v1717---2023-04-05",level:2},{value:"Changed",id:"changed-46",level:3},{value:"v1.71.6 - 2023-04-05",id:"v1716---2023-04-05",level:2},{value:"Fixed",id:"fixed-65",level:3},{value:"v1.71.5 - 2023-04-04",id:"v1715---2023-04-04",level:2},{value:"Fixed",id:"fixed-66",level:3},{value:"v1.71.4 - 2023-04-03",id:"v1714---2023-04-03",level:2},{value:"Fixed",id:"fixed-67",level:3},{value:"v1.71.3 - 2023-03-30",id:"v1713---2023-03-30",level:2},{value:"Fixed",id:"fixed-68",level:3},{value:"v1.71.2 - 2023-03-28",id:"v1712---2023-03-28",level:2},{value:"Changed",id:"changed-47",level:3},{value:"v1.71.1 - 2023-03-27",id:"v1711---2023-03-27",level:2},{value:"Added",id:"added-39",level:3},{value:"v1.70.2 - 2023-03-19",id:"v1702---2023-03-19",level:2},{value:"Added",id:"added-40",level:3},{value:"Changed",id:"changed-48",level:3},{value:"v1.70.1 - 2023-02-15",id:"v1701---2023-02-15",level:2},{value:"Added",id:"added-41",level:3},{value:"Fixed",id:"fixed-69",level:3},{value:"v1.70.0 - 2023-02-01",id:"v1700---2023-02-01",level:2},{value:"Added",id:"added-42",level:3},{value:"v1.64.1 - 2023-01-30",id:"v1641---2023-01-30",level:2},{value:"Fixed",id:"fixed-70",level:3},{value:"v1.64.0 - 2023-01-17",id:"v1640---2023-01-17",level:2},{value:"Changed",id:"changed-49",level:3},{value:"Fixed",id:"fixed-71",level:3},{value:"v1.63.0 - 2022-12-07",id:"v1630---2022-12-07",level:2},{value:"Added",id:"added-43",level:3},{value:"Changed",id:"changed-50",level:3},{value:"Fixed",id:"fixed-72",level:3},{value:"v1.62.1 - 2022-11-25",id:"v1621---2022-11-25",level:2},{value:"Added",id:"added-44",level:3},{value:"v1.61.7 - 2022-11-23",id:"v1617---2022-11-23",level:2},{value:"Fixed",id:"fixed-73",level:3},{value:"v1.61.6 - 2022-11-23",id:"v1616---2022-11-23",level:2},{value:"Fixed",id:"fixed-74",level:3},{value:"1.61.5 - 2022-11-18",id:"1615---2022-11-18",level:2},{value:"Fixed",id:"fixed-75",level:3},{value:"v1.61.2 - 2022-11-15",id:"v1612---2022-11-15",level:2},{value:"Added",id:"added-45",level:3},{value:"Fixed",id:"fixed-76",level:3},{value:"v1.61.1 - 2022-11-04",id:"v1611---2022-11-04",level:2},{value:"Added",id:"added-46",level:3},{value:"Changed",id:"changed-51",level:3},{value:"v1.61.0 - 2022-11-04",id:"v1610---2022-11-04",level:2},{value:"Added",id:"added-47",level:3},{value:"Changed",id:"changed-52",level:3},{value:"Fixed",id:"fixed-77",level:3},{value:"v1.60.0 - 2022-10-13",id:"v1600---2022-10-13",level:2},{value:"Added",id:"added-48",level:3},{value:"Changed",id:"changed-53",level:3},{value:"Fixed",id:"fixed-78",level:3},{value:"v1.59.0 - 2022-10-05",id:"v1590---2022-10-05",level:2},{value:"Added",id:"added-49",level:3},{value:"Fixed",id:"fixed-79",level:3},{value:"v1.58.1 - 2022-09-30",id:"v1581---2022-09-30",level:2},{value:"Fixed",id:"fixed-80",level:3},{value:"v1.58.0 - 2022-09-30",id:"v1580---2022-09-30",level:2},{value:"Added",id:"added-50",level:3},{value:"Changed",id:"changed-54",level:3},{value:"v1.57.0 - 2022-09-23",id:"v1570---2022-09-23",level:2},{value:"Added",id:"added-51",level:3},{value:"Fixed",id:"fixed-81",level:3},{value:"v1.56.0 - 2022-09-20",id:"v1560---2022-09-20",level:2},{value:"Added",id:"added-52",level:3},{value:"Fixed",id:"fixed-82",level:3},{value:"v1.55.0 - 2022-08-09",id:"v1550---2022-08-09",level:2},{value:"Added",id:"added-53",level:3},{value:"Changed",id:"changed-55",level:3},{value:"v1.54.1 - 2022-08-09",id:"v1541---2022-08-09",level:2},{value:"Added",id:"added-54",level:3},{value:"v1.54.0 - 2022-08-09 [YANKED]",id:"v1540---2022-08-09-yanked",level:2},{value:"Added",id:"added-55",level:3},{value:"v1.53.1 - 2022-08-05",id:"v1531---2022-08-05",level:2},{value:"Changed",id:"changed-56",level:3},{value:"Added",id:"added-56",level:3},{value:"Fixed",id:"fixed-83",level:3},{value:"v1.52.2 - 2022-07-28",id:"v1522---2022-07-28",level:2},{value:"Changed",id:"changed-57",level:3},{value:"v1.52.0 - 2022-07-25",id:"v1520---2022-07-25",level:2},{value:"Added",id:"added-57",level:3},{value:"Fixed",id:"fixed-84",level:3},{value:"v1.51.1 - 2022-07-04",id:"v1511---2022-07-04",level:2},{value:"Added",id:"added-58",level:3},{value:"Changed",id:"changed-58",level:3},{value:"Fixed",id:"fixed-85",level:3},{value:"v1.49.0 - 2022-06-20",id:"v1490---2022-06-20",level:2},{value:"Added",id:"added-59",level:3},{value:"Fixed",id:"fixed-86",level:3},{value:"v1.48.0 - 2022-06-15",id:"v1480---2022-06-15",level:2},{value:"Added",id:"added-60",level:3},{value:"Fixed",id:"fixed-87",level:3},{value:"v1.47.0 - 2022-06-13",id:"v1470---2022-06-13",level:2},{value:"Added",id:"added-61",level:3},{value:"Changed",id:"changed-59",level:3},{value:"v1.46.2 - 2022-05-18",id:"v1462---2022-05-18",level:2},{value:"Fixed",id:"fixed-88",level:3},{value:"v1.46.1 - 2022-05-18",id:"v1461---2022-05-18",level:2},{value:"Changed",id:"changed-60",level:3},{value:"v1.46.0 - 2022-05-18",id:"v1460---2022-05-18",level:2},{value:"Added",id:"added-62",level:3},{value:"v1.45.2 - 2022-05-13",id:"v1452---2022-05-13",level:2},{value:"Fixed",id:"fixed-89",level:3},{value:"v1.45.1 - 2022-05-11",id:"v1451---2022-05-11",level:2},{value:"Added",id:"added-63",level:3},{value:"v1.43.2 - 2022-05-09",id:"v1432---2022-05-09",level:2},{value:"Changed",id:"changed-61",level:3},{value:"Fixed",id:"fixed-90",level:3},{value:"v1.43.1 - 2022-05-08",id:"v1431---2022-05-08",level:2},{value:"Fixed",id:"fixed-91",level:3},{value:"v1.43.0 - 2022-05-06",id:"v1430---2022-05-06",level:2},{value:"Changed",id:"changed-62",level:3},{value:"v1.42.0 - 2022-05-05",id:"v1420---2022-05-05",level:2},{value:"Added",id:"added-64",level:3},{value:"v1.41.2 - 2022-05-04",id:"v1412---2022-05-04",level:2},{value:"Fixed",id:"fixed-92",level:3},{value:"v1.41.1 - 2022-05-03",id:"v1411---2022-05-03",level:2},{value:"Changed",id:"changed-63",level:3},{value:"v1.41.0 - 2022-05-02",id:"v1410---2022-05-02",level:2},{value:"Added",id:"added-65",level:3},{value:"Changed",id:"changed-64",level:3},{value:"Fixed",id:"fixed-93",level:3},{value:"Added",id:"added-66",level:3},{value:"v1.40.1 - 2022-04-28",id:"v1401---2022-04-28",level:2},{value:"Added",id:"added-67",level:3},{value:"Fixed",id:"fixed-94",level:3},{value:"v1.40.0 - 2022-04-28",id:"v1400---2022-04-28",level:2},{value:"Added",id:"added-68",level:3},{value:"Changed",id:"changed-65",level:3},{value:"v1.39.0 - 2022-04-25",id:"v1390---2022-04-25",level:2},{value:"Added",id:"added-69",level:3},{value:"Changed",id:"changed-66",level:3},{value:"v1.38.0 - 2022-04-25",id:"v1380---2022-04-25",level:2},{value:"Added",id:"added-70",level:3},{value:"Changed",id:"changed-67",level:3},{value:"Fixed",id:"fixed-95",level:3},{value:"v1.37.0 - 2022-04-21",id:"v1370---2022-04-21",level:2},{value:"Changed",id:"changed-68",level:3},{value:"v1.36.0 - 2022-04-20",id:"v1360---2022-04-20",level:2},{value:"Added",id:"added-71",level:3},{value:"Changed",id:"changed-69",level:3},{value:"v1.35.0 - 2022-04-19",id:"v1350---2022-04-19",level:2},{value:"Added",id:"added-72",level:3},{value:"Changed",id:"changed-70",level:3},{value:"Fixed",id:"fixed-96",level:3},{value:"v1.34.0 - 2022-03-29",id:"v1340---2022-03-29",level:2},{value:"Changed",id:"changed-71",level:3},{value:"Fixed",id:"fixed-97",level:3},{value:"v1.33.1 - 2022-03-24",id:"v1331---2022-03-24",level:2},{value:"Changed",id:"changed-72",level:3},{value:"Fixed",id:"fixed-98",level:3},{value:"v1.33.0 - 2022-03-23",id:"v1330---2022-03-23",level:2},{value:"Added",id:"added-73",level:3},{value:"Changed",id:"changed-73",level:3},{value:"v1.32.1 - 2022-03-04",id:"v1321---2022-03-04",level:2},{value:"Changed",id:"changed-74",level:3},{value:"v1.32.0 - 2022-03-01",id:"v1320---2022-03-01",level:2},{value:"Changed",id:"changed-75",level:3},{value:"Added",id:"added-74",level:3},{value:"Fixed",id:"fixed-99",level:3},{value:"v1.31.0 - 2022-02-17",id:"v1310---2022-02-17",level:2},{value:"Added",id:"added-75",level:3},{value:"Fixed",id:"fixed-100",level:3},{value:"Changed",id:"changed-76",level:3},{value:"v1.30.0 - 2022-02-08",id:"v1300---2022-02-08",level:2},{value:"Changed",id:"changed-77",level:3},{value:"v1.29.2 - 2022-02-07",id:"v1292---2022-02-07",level:2},{value:"Added",id:"added-76",level:3},{value:"Changed",id:"changed-78",level:3},{value:"Fixed",id:"fixed-101",level:3},{value:"v1.29.1 - 2022-02-02",id:"v1291---2022-02-02",level:2},{value:"Added",id:"added-77",level:3},{value:"Fixed",id:"fixed-102",level:3},{value:"1.29.0 - skipped due to problems with build",id:"1290---skipped-due-to-problems-with-build",level:2},{value:"v1.28.1 - 2022-01-14",id:"v1281---2022-01-14",level:2},{value:"Added",id:"added-78",level:3},{value:"Changed",id:"changed-79",level:3},{value:"Fixed",id:"fixed-103",level:3},{value:"v1.28.0 - 2022-01-12",id:"v1280---2022-01-12",level:2},{value:"Added",id:"added-79",level:3},{value:"Changed",id:"changed-80",level:3},{value:"Fixed",id:"fixed-104",level:3},{value:"v1.27.2 - 2021-12-16",id:"v1272---2021-12-16",level:2},{value:"Added",id:"added-80",level:3},{value:"Fixed",id:"fixed-105",level:3},{value:"v1.27.1 - 2021-12-02",id:"v1271---2021-12-02",level:2},{value:"Fixed",id:"fixed-106",level:3},{value:"v1.27.0 - 2021-12-01",id:"v1270---2021-12-01",level:2},{value:"Added",id:"added-81",level:3},{value:"Changed",id:"changed-81",level:3},{value:"Fixed",id:"fixed-107",level:3},{value:"v1.26.1 - 2021-11-30",id:"v1261---2021-11-30",level:2},{value:"Added",id:"added-82",level:3},{value:"v1.26.0 - 2021-11-30",id:"v1260---2021-11-30",level:2},{value:"Added",id:"added-83",level:3},{value:"v1.25.0 - 2021-11-15",id:"v1250---2021-11-15",level:2},{value:"Added",id:"added-84",level:3},{value:"v1.24.0 - 2021-11-12",id:"v1240---2021-11-12",level:2},{value:"Added",id:"added-85",level:3},{value:"Fixed",id:"fixed-108",level:3},{value:"v1.23.0 - 2021-11-04",id:"v1230---2021-11-04",level:2},{value:"Added",id:"added-86",level:3},{value:"v1.22.3 - 2021-10-15",id:"v1223---2021-10-15",level:2},{value:"Added",id:"added-87",level:3},{value:"Fixed",id:"fixed-109",level:3},{value:"v1.22.0 - 2021-10-11",id:"v1220---2021-10-11",level:2},{value:"Added",id:"added-88",level:3},{value:"Fixed",id:"fixed-110",level:3},{value:"v1.21.0 - 2021-10-11",id:"v1210---2021-10-11",level:2},{value:"Added",id:"added-89",level:3},{value:"Changed",id:"changed-82",level:3},{value:"Fixed",id:"fixed-111",level:3},{value:"v1.20.0 - 2021-09-30",id:"v1200---2021-09-30",level:2},{value:"Added",id:"added-90",level:3},{value:"Fixed",id:"fixed-112",level:3},{value:"v1.19.5 - 2021-09-28",id:"v1195---2021-09-28",level:2},{value:"Fixed",id:"fixed-113",level:3},{value:"v1.19.4 - 2021-09-24",id:"v1194---2021-09-24",level:2},{value:"Added",id:"added-91",level:3},{value:"Changed",id:"changed-83",level:3},{value:"Fixed",id:"fixed-114",level:3},{value:"v1.19.3 - 2021-09-23",id:"v1193---2021-09-23",level:2},{value:"Added",id:"added-92",level:3},{value:"Fixed",id:"fixed-115",level:3},{value:"v1.19.2 - 2021-09-20",id:"v1192---2021-09-20",level:2},{value:"Changed",id:"changed-84",level:3},{value:"Fixed",id:"fixed-116",level:3},{value:"v1.19.1 - 2021-09-19",id:"v1191---2021-09-19",level:2},{value:"Added",id:"added-93",level:3},{value:"Fixed",id:"fixed-117",level:3},{value:"v1.18.3 - 2021-09-13",id:"v1183---2021-09-13",level:2},{value:"Fixed",id:"fixed-118",level:3},{value:"v1.18.2 - 2021-09-09",id:"v1182---2021-09-09",level:2},{value:"Fixed",id:"fixed-119",level:3},{value:"v1.18.1 - 2021-09-09",id:"v1181---2021-09-09",level:2},{value:"Fixed",id:"fixed-120",level:3},{value:"v1.18.0 - 2021-09-07",id:"v1180---2021-09-07",level:2},{value:"Added",id:"added-94",level:3},{value:"Changed",id:"changed-85",level:3},{value:"Fixed",id:"fixed-121",level:3},{value:"v1.17.4 - 2021-09-01",id:"v1174---2021-09-01",level:2},{value:"Fixed",id:"fixed-122",level:3},{value:"v1.17.3 - 2021-08-31",id:"v1173---2021-08-31",level:2},{value:"Fixed",id:"fixed-123",level:3},{value:"v1.17.2 - 2021-08-30",id:"v1172---2021-08-30",level:2},{value:"Changed",id:"changed-86",level:3},{value:"Fixed",id:"fixed-124",level:3},{value:"v1.17.1 - 2021-08-30",id:"v1171---2021-08-30",level:2},{value:"Changed",id:"changed-87",level:3},{value:"v1.17.0 - 2021-08-30",id:"v1170---2021-08-30",level:2},{value:"Added",id:"added-95",level:3},{value:"Changed",id:"changed-88",level:3},{value:"Fixed",id:"fixed-125",level:3},{value:"v1.16.0 - 2021-08-18",id:"v1160---2021-08-18",level:2},{value:"v1.15.2 - 2021-08-18",id:"v1152---2021-08-18",level:2},{value:"v1.15.1 - 2021-08-16",id:"v1151---2021-08-16",level:2},{value:"Added",id:"added-96",level:3},{value:"Changed",id:"changed-89",level:3},{value:"v1.14.1 - 2021-08-03",id:"v1141---2021-08-03",level:2},{value:"Fixed",id:"fixed-126",level:3},{value:"v1.14.0 - 2021-08-02",id:"v1140---2021-08-02",level:2},{value:"Changed",id:"changed-90",level:3},{value:"Added",id:"added-97",level:3},{value:"Fixed",id:"fixed-127",level:3},{value:"v1.13.2 - 2021-07-09",id:"v1132---2021-07-09",level:2},{value:"Added",id:"added-98",level:3},{value:"Changed",id:"changed-91",level:3},{value:"Fixed",id:"fixed-128",level:3},{value:"v1.12.3 - 2021-07-02",id:"v1123---2021-07-02",level:2},{value:"Change",id:"change-1",level:3},{value:"v1.12.2 - 2021-07-02",id:"v1122---2021-07-02",level:2},{value:"Changed",id:"changed-92",level:3},{value:"Fixed",id:"fixed-129",level:3},{value:"v1.12.00 - 2021-06-15",id:"v11200---2021-06-15",level:2},{value:"Added",id:"added-99",level:3},{value:"v1.11.17 - 2021-06-14",id:"v11117---2021-06-14",level:2},{value:"Fixed",id:"fixed-130",level:3},{value:"v1.11.16 - 2021-05-26",id:"v11116---2021-05-26",level:2},{value:"Added",id:"added-100",level:3},{value:"Fixed",id:"fixed-131",level:3},{value:"Changed",id:"changed-93",level:3},{value:"v1.11.12 - 2021-05-11",id:"v11112---2021-05-11",level:2},{value:"Added",id:"added-101",level:3},{value:"v1.11.11 - 2021-04-26",id:"v11111---2021-04-26",level:2},{value:"fixed",id:"fixed-132",level:3},{value:"v1.11.10 - 2021-04-23",id:"v11110---2021-04-23",level:2},{value:"Added",id:"added-102",level:3},{value:"Changed",id:"changed-94",level:3},{value:"v1.11.09 - 2021-04-xx",id:"v11109---2021-04-xx",level:2},{value:"Added",id:"added-103",level:3},{value:"v1.11.8 - 2021-04-15",id:"v1118---2021-04-15",level:2},{value:"Added",id:"added-104",level:3},{value:"Changed",id:"changed-95",level:3},{value:"Fixed",id:"fixed-133",level:3},{value:"v1.11.6 - 2021-03-31",id:"v1116---2021-03-31",level:2},{value:"Changed",id:"changed-96",level:3},{value:"v1.11.5 - 2021-03-22",id:"v1115---2021-03-22",level:2},{value:"Added",id:"added-105",level:3},{value:"Changed",id:"changed-97",level:3},{value:"v1.11.4 - 2021-03-16",id:"v1114---2021-03-16",level:2},{value:"Added",id:"added-106",level:3},{value:"Changed",id:"changed-98",level:3},{value:"Fixed",id:"fixed-134",level:3},{value:"v1.11.0 - 2021-03-03",id:"v1110---2021-03-03",level:2},{value:"Added",id:"added-107",level:3},{value:"v1.10.7 - 2021-02-26",id:"v1107---2021-02-26",level:2},{value:"Changed",id:"changed-99",level:3},{value:"v1.10.6 - 2021-02-18",id:"v1106---2021-02-18",level:2},{value:"Added",id:"added-108",level:3},{value:"Fixed",id:"fixed-135",level:3},{value:"v1.10.2 - 2021-02-13",id:"v1102---2021-02-13",level:2},{value:"Fixed",id:"fixed-136",level:3},{value:"v1.10.1 - 2021-02-12",id:"v1101---2021-02-12",level:2},{value:"Added",id:"added-109",level:3},{value:"Changed",id:"changed-100",level:3},{value:"Fixed",id:"fixed-137",level:3},{value:"v1.10.0 - 2021-02-08",id:"v1100---2021-02-08",level:2},{value:"Added",id:"added-110",level:3},{value:"Changed",id:"changed-101",level:3},{value:"Fixed",id:"fixed-138",level:3},{value:"v1.9.2 - 2021-01-25",id:"v192---2021-01-25",level:2},{value:"Added",id:"added-111",level:3},{value:"1.9.1 - 2021-01-15",id:"191---2021-01-15",level:2},{value:"Fixed",id:"fixed-139",level:3},{value:"v1.9.1 - 2021-01-13",id:"v191---2021-01-13",level:2},{value:"Added",id:"added-112",level:3},{value:"Changed",id:"changed-102",level:3},{value:"Fixed",id:"fixed-140",level:3},{value:"v1.8.7 - 2020-09-29",id:"v187---2020-09-29",level:2},{value:"Added",id:"added-113",level:3},{value:"Fixed",id:"fixed-141",level:3},{value:"v1.8.5 - 2020-09-08",id:"v185---2020-09-08",level:2},{value:"Fixed",id:"fixed-142",level:3},{value:"v1.8.4 - 2020-09-02",id:"v184---2020-09-02",level:2},{value:"Fixed",id:"fixed-143",level:3},{value:"v1.8.3 - 2020-08-28",id:"v183---2020-08-28",level:2},{value:"Added",id:"added-114",level:3},{value:"Changed",id:"changed-103",level:3},{value:"v1.7.0 - 2020-06-04",id:"v170---2020-06-04",level:2},{value:"Added",id:"added-115",level:3},{value:"Changed",id:"changed-104",level:3},{value:"v1.6.0 - 2020-04-09",id:"v160---2020-04-09",level:2},{value:"Added",id:"added-116",level:3},{value:"Changed",id:"changed-105",level:3},{value:"Removed",id:"removed-1",level:3},{value:"Fixed",id:"fixed-144",level:3},{value:"v1.5.0",id:"v150",level:2},{value:"Added",id:"added-117",level:3}];function o(e){const d={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d.h1,{id:"changelog",children:"Changelog"}),"\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.strong,{children:"Application:"})," Lobaro Backend"]}),"\n",(0,n.jsx)(d.h2,{id:"11045---2024-06-24",children:"1.104.5 - 2024-06-24"}),"\n",(0,n.jsx)(d.h3,{id:"changed",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices Created At added as hidden default column in Devices Table"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11044---2024-06-24",children:"1.104.4 - 2024-06-24"}),"\n",(0,n.jsx)(d.h3,{id:"fixed",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Parser UI - Editor would switch to default parser when editing the custom parser"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11043---2024-06-24",children:"1.104.3 - 2024-06-24"}),"\n",(0,n.jsx)(d.h3,{id:"changed-1",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Default input format for js parser function ",(0,n.jsx)(d.code,{children:"Record.setTime()"})," is an RFC3339 string, default timestamp format for JSON.","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["It can be created from a Date in JavaScript via ",(0,n.jsx)(d.code,{children:"new Date(unixms).toISOString()"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-1",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fix api token deletion message"}),"\n",(0,n.jsx)(d.li,{children:"HTTP handler panic for Chirpstack Join events"}),"\n",(0,n.jsx)(d.li,{children:"Devices Table - localStorage was not use in some special cases - causing the table to change unexpectedly when sorting or filtering"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11042---2024-06-19",children:"1.104.2 - 2024-06-19"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-2",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"bad timing caused nil Nats client on startup"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11041---2024-06-19",children:"1.104.1 - 2024-06-19"}),"\n",(0,n.jsx)(d.h3,{id:"changed-2",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Devices Table - deactivate ability to sort by organisation when displaying scope "global" or "organisation with suborgs" as it caused empty results. Workaround is to change into the organisation and display the devices table'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11040---2024-06-18",children:"1.104.0 - 2024-06-18"}),"\n",(0,n.jsx)(d.h3,{id:"added",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices Table - New Column Settings Dialog - Pin columns to left or right edge of the table to make them always visible while scrolling"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-3",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Key Exchange Import - Reworked with async backend processing to handle large key imports"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11033---2024-06-12",children:"1.103.3 - 2024-06-12"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-3",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices Page: when opening a filter dialog, the filter input field is always focused"}),"\n",(0,n.jsx)(d.li,{children:"broken export on non-devicesPages"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11032---2024-06-11",children:"1.103.2 - 2024-06-11"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-4",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fix double x axis scroll bar - where the table was not scrollable because the page displayed a scrollbar over the devices table scrollbar"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11031---2024-06-11",children:"1.103.1 - 2024-06-11"}),"\n",(0,n.jsx)(d.h3,{id:"changed-4",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Lansen wMbus Gateways will use a "las-" prefix in the address.'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-5",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed translation of export devices csv dialog on devices page"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11030---2024-06-11",children:"1.103.0 - 2024-06-11"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-6",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"WmbusKeyImport: Reset all button now resets all fields"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-5",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Export Devices CSV now exports:","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"selected or all devices of a device type"}),"\n",(0,n.jsx)(d.li,{children:"CSV format as configured in the table config or in a hardware import conform CSV format"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11023---2024-06-06",children:"1.102.3 - 2024-06-06"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-7",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"WmbusKeyImport: Scale table (full page) and progressbar (only half page) as intended"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11022---2024-06-04",children:"1.102.2 - 2024-06-04"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-8",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Too much logging of failed wMBus parsing attempts"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11021---2024-06-04",children:"1.102.1 - 2024-06-04"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-9",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Parser cache not being saved due to failing Cache directory creation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11020---2024-06-04",children:"1.102.0 - 2024-06-04"}),"\n",(0,n.jsx)(d.h3,{id:"changed-6",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Reworked wMBus key import page, unifying import via CSV and Key Exchange Platform"}),"\n",(0,n.jsx)(d.li,{children:"Key import in batches for better performance"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-1",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Supported importing of Sensus RF key CSVs"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"110110---2024-05-25",children:"1.101.10 - 2024-05-25"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-10",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed a bug where the device type side menu would show wrong counts when a device type was not owned by the current organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-7",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Type Side Menu size when expanded is now smaller"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11019---2024-05-24",children:"1.101.9 - 2024-05-24"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-11",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed a bug where the device type side menu would not show the correct device type count"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11018---2024-05-24",children:"1.101.8 - 2024-05-24"}),"\n",(0,n.jsx)(d.h3,{id:"changed-8",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"New Devices Data Table is now permanent active - removed experimental design switch in myAccountMenu"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11017---2024-05-24",children:"1.101.7 - 2024-05-24"}),"\n",(0,n.jsx)(d.h3,{id:"added-2",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"suborg"}),"role for REST API Tokens: Read-only access to devices and parsed data of all suborgs"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-9",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices CSV export only exports the devices of the current selected device type"}),"\n",(0,n.jsxs)(d.li,{children:["Improve PipelineStore queries, avoiding ",(0,n.jsx)(d.code,{children:"LIMIT 1"})," for unique data queries, update cache device with every device update in (pipeline) DB"]}),"\n",(0,n.jsxs)(d.li,{children:["Making ",(0,n.jsx)(d.code,{children:"xlog"})," main logging factory:","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Wrapping ",(0,n.jsx)(d.code,{children:"slog.Logger"}),", but also supplying some ",(0,n.jsx)(d.code,{children:"logrus"})," functions (",(0,n.jsx)(d.code,{children:"WithError()"}),", ",(0,n.jsx)(d.code,{children:"WithFields()"}),", \xb4...) for compatibility"]}),"\n",(0,n.jsx)(d.li,{children:"Added functions for dynamically changing logging settings"}),"\n",(0,n.jsx)(d.li,{children:"Unifying Log levels, to make a future change of the logging backend easier"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.li,{children:"Device Type Side Menu uses cached queries for device counts - frontend caches for 1 minute - backend caches for 5 minutes and invalidates cache if new devices are created"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"removed",children:"Removed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"slogLogrus"}),"package, as the logging backend was switched from logrus to slog"]}),"\n",(0,n.jsxs)(d.li,{children:["Direct ",(0,n.jsx)(d.code,{children:"logrus"})," dependency; still needed by github.com/docker/docker"]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11016---2024-05-22",children:"1.101.6 - 2024-05-22"}),"\n",(0,n.jsx)(d.h3,{id:"changed-10",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Improvements in UI for Device Type Side Menu"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11015---2024-05-22",children:"1.101.5 - 2024-05-22"}),"\n",(0,n.jsx)(d.h3,{id:"changed-11",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update mbus lib to v1.11.3"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-12",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fix humanizing attempts of invalid compact profiles"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11014---2024-05-22",children:"1.101.4 - 2024-05-22"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-13",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Export Devices CSV failed on Devices Page - works now"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11013---2024-05-22---do-not-use---broken",children:"1.101.3 - 2024-05-22 - DO NOT USE - BROKEN"}),"\n",(0,n.jsx)(d.h2,{id:"11012---2024-05-16",children:"1.101.2 - 2024-05-16"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-14",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"reintruduced now fixed device ammount bubbles"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11011---2024-05-16",children:"1.101.1 - 2024-05-16"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-15",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Gormstore: ignored scope in device count query"}),"\n",(0,n.jsx)(d.li,{children:"Devices Page Navigation: use correct scope on device count query"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11010---2024-05-15",children:"1.101.0 - 2024-05-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-3",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Display wMBus key fingerprints in the key table, searchable to find the key used to decrypt a telegram"}),"\n",(0,n.jsx)(d.li,{children:"Device Types Menu shows device types with count and allows order by count or alphabetically"}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"Record.setTimeField()"}),"to set the name of a custom time field in each output record, works for batch records as well","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["This field is then used to set the time of each record, instead of the default ",(0,n.jsx)(d.code,{children:"time"})," field or ",(0,n.jsx)(d.code,{children:"receivedAt"})," field"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-12",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated mbus lib to v1.11.2"}),"\n",(0,n.jsx)(d.li,{children:"Output of key fingerprint in parsed telegram output"}),"\n",(0,n.jsx)(d.li,{children:"Reworked Device Types Menu on left side of Device Types and Data Page"}),"\n",(0,n.jsx)(d.li,{children:"Logging raw telegram + key fingerprint if parser panics"}),"\n",(0,n.jsx)(d.li,{children:"Devices Import Dialog now shows the organisation of an existing device"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"deprecated",children:"Deprecated"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"Record.setTime()"}),", as it doesn't work for batch record returns","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Use ",(0,n.jsx)(d.code,{children:"Record.setTimeField()"})," so set the name of a custom time field in each output record instead"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-16",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Panic when OMS parsing via API fails, logging errors and info, and returning nil instead"}),"\n",(0,n.jsx)(d.li,{children:"Logging app and org id values"}),"\n",(0,n.jsx)(d.li,{children:"JSON logging without HTML escaping"}),"\n",(0,n.jsx)(d.li,{children:"keyExchangePlatform import: inform user when there was no new key at exchange platform"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"11000---2024-05-07",children:"1.100.0 - 2024-05-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-4",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added menu to display/hide columns in the device (experimental) table. The configuration is saved per user and device type."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-17",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"When exporting devices, only selected Devices will be exported."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1996---2024-04-30",children:"1.99.6 - 2024-04-30"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-18",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices Page: frontend crash on empty deviceType Device Table Config cols array"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-13",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Batch uplinks: If parsing fails, individual errors will be returned for each uplink, and the successful ones will be stored and processed"}),"\n",(0,n.jsx)(d.li,{children:"Use pipeline store to fetch device info for parsing and CoAP: For better performance it only preloads the certificate, and includes only a limited number of columns. If caching is enabled, it will cache the device data there."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1995---2024-04-23",children:"1.99.5 - 2024-04-23"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-19",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device table fallback to default table config, if none is present"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1994---2024-04-22",children:"1.99.4 - 2024-04-22"}),"\n",(0,n.jsx)(d.h3,{id:"changed-14",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Silence housekeeping for organisations without data retention limits in DB log"}),"\n",(0,n.jsx)(d.li,{children:"Searchable Cron log table"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-20",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"NaN"}),"replacement for customer parser (slice of maps was not handled correctly)"]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1993---2024-04-16",children:"1.99.3 - 2024-04-16"}),"\n",(0,n.jsx)(d.h3,{id:"changed-15",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Pipeline: always load device from DB before parsing and never take it from msg object"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-21",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update MBus lib to v1.10.0, fixing Qundis failed decryption, but parsing encrypted payload issue"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1992---2024-04-16",children:"v1.99.2 - 2024-04-16"}),"\n",(0,n.jsx)(d.h2,{id:"added-5",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"New (ant) table design in the devices tab. (Can be activated via the profile settings)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"changed-16",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices query returns a devicesResult object, containing a devices array and pagination info, instead of an array of devices"}),"\n",(0,n.jsx)(d.li,{children:"Pre-select current organisation when creating new users via Organisation section"}),"\n",(0,n.jsxs)(d.li,{children:["Replacing all ",(0,n.jsx)(d.code,{children:"NaN"})," values in parsed output, device config and properties updates with ",(0,n.jsx)(d.code,{children:"null"})," for JSON compatibility"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-22",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["wMBus key import from exchange platform: Only import ",(0,n.jsx)(d.code,{children:"END_USE"})," keys"]}),"\n",(0,n.jsx)(d.li,{children:"dont crash on nil nats connection ins NATS Client Service."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1991---2024-04-08",children:"v1.99.1 - 2024-04-08"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-23",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Key field usage with org key store in wmbus parser page"}),"\n",(0,n.jsx)(d.li,{children:"fixed DB connection string logging"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1990---2024-04-03",children:"v1.99.0 - 2024-04-03"}),"\n",(0,n.jsx)(d.h3,{id:"added-6",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added metrics for Stream sizes to prometheus"}),"\n",(0,n.jsx)(d.li,{children:"Slow Queries are now also logged in JSON format"}),"\n",(0,n.jsx)(d.li,{children:"Metric gorm_query_duration_seconds to trace Query Duration for different query types"}),"\n",(0,n.jsxs)(d.li,{children:["Output format options for HTTP integrations","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"JSON object (default)"}),"\n",(0,n.jsx)(d.li,{children:"JSON Array (wrapping a JSON object)"}),"\n",(0,n.jsx)(d.li,{children:"URL-encoded JSON (with customizable key)"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-17",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"NATS based pipeline metric names for prometheus were cleaned up"}),"\n",(0,n.jsxs)(d.li,{children:["When Parser runtime is exceeded and parser can not be interrupted shut down the server again","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Create CPU and memory profile before shutdown"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.li,{children:"Updated to GoLang v1.22.2"}),"\n",(0,n.jsx)(d.li,{children:"Updated MBus Parser to v1.9.0"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-24",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"GraphQL query in wMBus parser tab updated to ensure org keystore is used when option is ticked"}),"\n",(0,n.jsx)(d.li,{children:"Update device in cache after parsing properties or config values"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1981---2024-04-02",children:"v1.98.1 - 2024-04-02"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-25",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"JetStream messages are all acked, else they stay inside the stream"}),"\n",(0,n.jsx)(d.li,{children:"URL Escaping for DB Connection string"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-18",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated mbus parser lib to v1.8.0"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1980---2024-04-02",children:"v1.98.0 - 2024-04-02"}),"\n",(0,n.jsx)(d.h3,{id:"changed-19",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"NATS is using JetStream to persist Queue items"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-26",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Key Import (exchange platform) use start param"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1971---2024-03-28",children:"v1.97.1 - 2024-03-28"}),"\n",(0,n.jsx)(d.h3,{id:"added-7",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Integration Individual Log Limits for Success and Error"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-20",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Deivces are not cached during uplink handling (Config: Database.Cache.deviceExpirationSec)"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-27",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Stop startup of nats client when other service failed"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1970---2024-03-26",children:"v1.97.0 - 2024-03-26"}),"\n",(0,n.jsx)(d.h3,{id:"db-migrations",children:"DB Migrations"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.strong,{children:"ATTENTION"}),": Contains long running DB transformation (on startup)","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Migrations: 74"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-8",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Uplinks can be searched by their type"}),"\n",(0,n.jsx)(d.li,{children:"Uplinks can be filtered by created_at date"}),"\n",(0,n.jsx)(d.li,{children:"Slow Queries are now also logged in JSON"}),"\n",(0,n.jsx)(d.li,{children:"MQTT Integrations: Configurable Timeout"}),"\n",(0,n.jsx)(d.li,{children:"MQTT Integrations: Do not log executions option"}),"\n",(0,n.jsx)(d.li,{children:"HTTP Integrations: Do not log executions option"}),"\n",(0,n.jsx)(d.li,{children:"Configureable Ratelimit for Integration execution logging"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-21",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Removed quotes from text based logging"}),"\n",(0,n.jsx)(d.li,{children:"Device Type bulk operation entries link to the device's respective data page, as is the default for other device tables."}),"\n",(0,n.jsx)(d.li,{children:"Default Timeout for MQTT Integrations is now 10 seconds"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixes",children:"Fixes"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"JSON Log Format was not printing some fields"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1965---2024-03-12",children:"v1.96.5 - 2024-03-12"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-28",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"nats pending item metrics now published"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1964---2024-03-10",children:"v1.96.4 - 2024-03-10"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-29",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Cron runner for some nats metrics was not running"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1963---2024-03-07",children:"v1.96.3 - 2024-03-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-9",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Metrics for NATS pending messages nats_handle_device_uplink_pending, nats_integrations_pending"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-22",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Removed metric integration_queue_seconds"}),"\n",(0,n.jsx)(d.li,{children:"Table headers use no caps to make german umlaut better readable"}),"\n",(0,n.jsx)(d.li,{children:"Prefill device type when calling import from device page"}),"\n",(0,n.jsx)(d.li,{children:"Updated mbus parser lib to v1.7.0"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-30",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed a bug where a moving devices into another organisation via the bulk operation would display failed operations as successful"}),"\n",(0,n.jsx)(d.li,{children:"Device bulk operations from suborgs into parent/base org now work as expected"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1962---2024-03-04",children:"v1.96.2 - 2024-03-04"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-31",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"handle_integrations_seconds was not available"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1961---2024-03-04",children:"v1.96.1 - 2024-03-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-10",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Config parameters to set the amount of queue workers: nats.UplinkHandlerWorkers and nats.IntegrationHandlerWorkers"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-32",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Limit parallel execution of integrations"}),"\n",(0,n.jsx)(d.li,{children:"Do not shutdown platform when parser times out during heavy load"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1960---2024-02-27",children:"v1.96.0 - 2024-02-27"}),"\n",(0,n.jsx)(d.h3,{id:"added-11",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser updated to v1.6.4"}),"\n",(0,n.jsx)(d.li,{children:"wMbus key management allows to search for meterId and manufacturer at the same time"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-23",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"new button design for wMbus key management"}),"\n",(0,n.jsx)(d.li,{children:"Optimized query for parsed_data uses limit of 3500"}),"\n",(0,n.jsx)(d.li,{children:"csv import of wmbus keys is now more reliable"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1953---2024-02-27",children:"v1.95.3 - 2024-02-27"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-33",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"problem with temporary keys in organisation wmbus Keystore."}),"\n",(0,n.jsx)(d.li,{children:"Language selection based on two digit language code (ISO 639), ignoring possible following country code (ISO 3166). E.g.: 'en-US' will be read as 'en'"}),"\n",(0,n.jsx)(d.li,{children:"Link to hardware Activationpage in the top navigation for guests/not logged in users"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1952---2024-02-24",children:"v1.95.2 - 2024-02-24"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-34",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"added missing default store middelware to mbus handler stack"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1951---2024-02-24",children:"v1.95.1 - 2024-02-24"}),"\n",(0,n.jsx)(d.h3,{id:"added-12",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus key store usage on wmbus api in frontend"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-35",children:"Fixed"}),"\n",(0,n.jsx)(d.p,{children:"forgotten label on prometheus statistics increment that could lead to panic"}),"\n",(0,n.jsx)(d.h2,{id:"v1950---2024-02-24",children:"v1.95.0 - 2024-02-24"}),"\n",(0,n.jsx)(d.h3,{id:"added-13",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"loggedin Users (frontend and API used with token) can now use their organisations wmbus key store when using the wmbus API"}),"\n",(0,n.jsx)(d.li,{children:"Configurable amount of workers for parser"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-24",children:"Changed"}),"\n",(0,n.jsx)(d.p,{children:"limited parallel computing of wmbus API requests"}),"\n",(0,n.jsx)(d.h2,{id:"v1944---2024-02-21",children:"v1.94.4 - 2024-02-21"}),"\n",(0,n.jsx)(d.h3,{id:"added-14",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"prometheus monitoring for NATS Queues"}),"\n",(0,n.jsx)(d.li,{}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-25",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Optimization to reduce runtime of getParsedDataForOrg call via rest endpoint"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1943---2024-02-20",children:"v1.94.3 - 2024-02-20"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-36",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed nil pointer issues in the optimization of long-running queries in the data tab"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1942---2024-02-20---skipped-due-to-build-problems",children:"v1.94.2 - 2024-02-20 - SKIPPED DUE TO BUILD PROBLEMS"}),"\n",(0,n.jsx)(d.h3,{id:"changed-26",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Optimization to reduce runtime of some long-running queries in the data tab"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1941---2024-02-19",children:"v1.94.1 - 2024-02-19"}),"\n",(0,n.jsx)(d.h3,{id:"changed-27",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated to GoLang v1.22"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-37",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Data Tab did not load table config"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1940----2024-02-15",children:"v1.94.0 - 2024-02-15"}),"\n",(0,n.jsx)(d.h3,{id:"changed-28",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MBus lib: Update to 1.6.3"}),"\n",(0,n.jsx)(d.li,{children:"Otto JS runtime enviroment update to 0.3.0"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-38",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"sanitizing of unusual quote marks in downlink text input"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1931----2024-02-14",children:"v1.93.1 - 2024-02-14"}),"\n",(0,n.jsx)(d.h3,{id:"reverted",children:"Reverted"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Otto JS runtime enviroment update"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1930----2024-02-09",children:"v1.93.0 - 2024-02-09"}),"\n",(0,n.jsx)(d.h3,{id:"added-15",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Firmware page: copy downlink json button for common used firmware"}),"\n",(0,n.jsx)(d.li,{children:"log functions for js parsers"}),"\n",(0,n.jsx)(d.li,{children:"updated to otto 0.3.0"}),"\n",(0,n.jsx)(d.li,{children:'Sanitize \u201e,\u201c literals in downlink text input with " literal to avoid parsing errors.'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-29",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated Otto JS Runtime to v0.3.0"}),"\n",(0,n.jsx)(d.li,{children:"KeyExchangePlatform: Use API v2"}),"\n",(0,n.jsx)(d.li,{children:"KeyExchangePlatform: Display progress of key import"}),"\n",(0,n.jsx)(d.li,{children:"Improved performance of Data Page"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-39",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Creating new hardware for a device type that is private produced an invalid validation error"}),"\n",(0,n.jsx)(d.li,{children:"Fixed infinite spinner in device types data, when no data was returned from the server"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1920----2024-02-02",children:"v1.92.0 - 2024-02-02"}),"\n",(0,n.jsx)(d.h3,{id:"added-16",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"mbus Lib v1.6.2"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-30",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"on shutdown after Otto infinity loop input data are logged to enable debugging."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1911---2024-01-29",children:"v1.91.1 - 2024-01-29"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-40",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"coap handler: binary firmware updates total calculation offset of 1 fixed"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1910---2024-01-31",children:"v1.91.0 - 2024-01-31"}),"\n",(0,n.jsx)(d.h3,{id:"added-17",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Filter for default columns in device table"}),"\n",(0,n.jsx)(d.li,{children:"binary firmware files over coap now have address query Param"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1900---2024-01-26",children:"v1.90.0 - 2024-01-26"}),"\n",(0,n.jsx)(d.h3,{id:"added-18",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Basic support for binary firmware files over coap, e.g. for modem firmware updates"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-31",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DeviceType Import: current organisation is now preselected"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-41",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Firmware Cache removes file when deleted."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1890---2024-01-22",children:"v1.89.0 - 2024-01-22"}),"\n",(0,n.jsx)(d.h2,{id:"added-19",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Platform can now receive lobaro WMBUS Gateway uploads over MQTT"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1882---2024-01-19",children:"v1.88.2 - 2024-01-19"}),"\n",(0,n.jsx)(d.h2,{id:"fixed-42",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Issuses with the Lansen gateway information (MQTT topic LAS/W/I)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1881---2024-01-19",children:"v1.88.1 - 2024-01-19"}),"\n",(0,n.jsx)(d.h3,{id:"changed-32",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Type Selectors now can display up 25 matching device types"}),"\n",(0,n.jsx)(d.li,{children:"Search for device types now also looks for device type ID"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1880---2024-01-16",children:"v1.88.0 - 2024-01-16"}),"\n",(0,n.jsx)(d.h3,{id:"changed-33",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"updated to GoLang v1.21"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-20",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Platform can now receive Lansen WMBUS Gateway uploads over MQTT"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1871---2023-12-19",children:"v1.87.1 - 2023-12-19"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-43",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Missing store in context of async integrations"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1870---2023-12-19",children:"v1.87.0 - 2023-12-19"}),"\n",(0,n.jsx)(d.h3,{id:"changed-34",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Lobaro wMbus Api v1.5.14"}),"\n",(0,n.jsx)(d.li,{children:"org-admins can now also create, reschedule and delete downlinks for devices in their organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1860---2023-12-14",children:"v1.86.0 - 2023-12-14"}),"\n",(0,n.jsx)(d.h3,{id:"added-21",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow usage of shorter default RealData keys for parsing appropriate wMBus telegrams"}),"\n",(0,n.jsx)(d.li,{}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-44",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Creating new hardware for a device type that is private was not possible"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1850---2023-12-12",children:"v1.85.0 - 2023-12-12"}),"\n",(0,n.jsx)(d.h3,{id:"changed-35",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Lobaro mBus Lib v1.5.13"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-45",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"When importing a device type the data table config was set as the device table config"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1842---2023-12-11",children:"v1.84.2 - 2023-12-11"}),"\n",(0,n.jsx)(d.h3,{id:"changed-36",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["JSON Logging Environment variable is now: ",(0,n.jsx)(d.code,{children:"LOB_JSON_LOGGING"})]}),"\n",(0,n.jsx)(d.li,{children:"Also use structured logging for first line of log output when enabled"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1841---2023-12-11",children:"v1.84.1 - 2023-12-11"}),"\n",(0,n.jsx)(d.h3,{id:"note",children:"Note"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Broken release!"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1840---2023-12-07",children:"v1.84.0 - 2023-12-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-22",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Type Config Properties can be reordered"}),"\n",(0,n.jsx)(d.li,{children:"Tags can be searched in the Device page"}),"\n",(0,n.jsx)(d.li,{children:"Server logging in JSON format"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-46",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DeviceDetailPage link to devices page in header fixed"}),"\n",(0,n.jsx)(d.li,{children:"GraphQL Broken escaping for field value in custom filters"}),"\n",(0,n.jsx)(d.li,{children:"Broken Top Navigation after login/logout/user change"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1830---2023-12-04",children:"v1.83.0 - 2023-12-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-23",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Czech language"}),"\n",(0,n.jsx)(d.li,{children:"Device Type Import"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1821---2023-11-9",children:"v1.82.1 - 2023-11-9"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-47",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed error on GQL Device endpoint for devices that are not attached to a organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-37",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Suborg Statics and Page are no longer shown in Orgs without suborgs/the right to have suborgs"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1820---2023-10-24",children:"v1.82.0 - 2023-10-24"}),"\n",(0,n.jsx)(d.h3,{id:"added-24",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Usage Statistics can now be closed in an accordion with a persistant state"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1812---2023-10-23",children:"v1.81.2 - 2023-10-23"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-48",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed view downlink list was not possible when org_admin was viewing devices in a suborg"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1811---2023-10-08",children:"v1.81.1 - 2023-10-08"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-49",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fixed statistics now include devices from parent and sub orgs"}),"\n",(0,n.jsx)(d.li,{children:"Fixed a bug where device data could not be sorted by field"}),"\n",(0,n.jsx)(d.li,{children:"Updated permissions to allow admin, orgAdmin and deviceAdmin to create device downlinks"}),"\n",(0,n.jsx)(d.li,{children:"Fixed a bug where searching devices via their comments failed when the device comment was used to store id like strings (e.g. serial numbers)"}),"\n",(0,n.jsx)(d.li,{children:"Fixed a bug where the test input of a device setting did not show the latest device data and did not update after an uplink was simulated"}),"\n",(0,n.jsx)(d.li,{children:"When paginating devices that have no last received date, an arbitrary order (by internal id) will be used to preserve the pagination order"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-25",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Added "Organisation" selection to Device Settings Page'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1810---2023-10-02",children:"v1.81.0 - 2023-10-02"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-50",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed creating new users as non-admin, where a maxUsers limit was falsely shown to be reached"}),"\n",(0,n.jsx)(d.li,{children:"fixed updating the maxUser limit of an organisation"}),"\n",(0,n.jsx)(d.li,{children:"fixed a typo in the device-type copy resolver, that copied the 'data table config' into the 'device table config'"}),"\n",(0,n.jsx)(d.li,{children:"fixed a bug where subOrgs could not be displayed when an admin selects subOrgs in the devices page"}),"\n",(0,n.jsx)(d.li,{children:"fixed typos in german translation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-26",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"REST Endpoints for http integration management"}),"\n",(0,n.jsx)(d.li,{children:"Inform user about amount of ignored keys when importing from exchange platform"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-38",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"REST API: added panic catching middleware with extended logging on rest API handlers."}),"\n",(0,n.jsx)(d.li,{children:"create a device tag when focus is lost on the device/settings page"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1803---2023-08-19",children:"v1.80.3 - 2023-08-19"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-51",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow org-admin to switch bach to own base organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1802---2023-08-18",children:"v1.80.2 - 2023-08-18"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-52",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"typo that lead to error on devices Page"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1801---2023-08-18",children:"v1.80.1 - 2023-08-18"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-53",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"organisation edit in device settings"}),"\n",(0,n.jsx)(d.li,{children:"admins impersonating users can have problems with no longer assacibile scope for devices set"}),"\n",(0,n.jsx)(d.li,{children:"error on wmbus key edit."}),"\n",(0,n.jsx)(d.li,{}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-39",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'DeviceType Parser: Removed feature for "default" selection'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1800---2023-08-15",children:"v1.80.0 - 2023-08-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-27",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Example configuration is automatically generated with comments and default values"}),"\n",(0,n.jsx)(d.li,{children:"Device import on Devices Page in organisation"}),"\n",(0,n.jsx)(d.li,{children:"Configuration parameters for CoAP and CoAPs ports"}),"\n",(0,n.jsx)(d.li,{children:"CompactFrame Table: cut Values decimal places to exponent precision"}),"\n",(0,n.jsx)(d.li,{children:"Copy DeviceType feature"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-40",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wMbus AES Keys can now be displayed with masked middle"}),"\n",(0,n.jsx)(d.li,{children:"Devices Pages saves scope and selected device type in local storage"}),"\n",(0,n.jsx)(d.li,{children:"Removed unused components like customer specific prototypes"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-54",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"CertEnforceDtls only blocks requests without cert"}),"\n",(0,n.jsx)(d.li,{children:"fixed some frontend issue with wmbus key import from key exchange platform"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1791---2023-07-14",children:"v1.79.1 - 2023-07-14"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-55",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Org Admin can access device page"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1790---2023-07-13",children:"v1.79.0 - 2023-07-13"}),"\n",(0,n.jsx)(d.h3,{id:"added-28",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Bulk operation supports to change device organisation"}),"\n",(0,n.jsx)(d.li,{children:"Device Table can now display devices from scope: Organisation, Organisation With Suborgs and Global"}),"\n",(0,n.jsx)(d.li,{children:"search for empty meterId and manufacturer in WmbusKey Table"}),"\n",(0,n.jsx)(d.li,{children:'added is isnull filter for "is null" and "is not null" searches in filter API/GQL-filter'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-41",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Only admins can change the address of existing devices"}),"\n",(0,n.jsx)(d.li,{children:"Updates wmbus parser to v1.5.12 to fix parsing of Zenner invalid values"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1781---2023-07-05",children:"v1.78.1 - 2023-07-05"}),"\n",(0,n.jsx)(d.h3,{id:"added-29",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.strong,{children:"ATTENTION"}),": Contains long running DB transformation (on startup)"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-56",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Nats monitoring endpoint was not working"}),"\n",(0,n.jsx)(d.li,{children:"Properly handle server shutdown, do not hang up"}),"\n",(0,n.jsx)(d.li,{children:"Start monitoring immediately after startup and do not wait 30 seconds"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1770---2023-06-29",children:"v1.77.0 - 2023-06-29"}),"\n",(0,n.jsx)(d.h3,{id:"added-30",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"device certificates can now be deleted by admins/orgadmins/device-admins"}),"\n",(0,n.jsx)(d.li,{children:"Device DTLS Certs can now be deleted by admins, org-admins and device-admins"}),"\n",(0,n.jsx)(d.li,{children:"UsageStatistics Cron worker now also reports into the CronLog."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-42",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Actility datasource now uses network-server tokens, disabled old datasource concept in apps"}),"\n",(0,n.jsx)(d.li,{children:"Update mbus parser to v1.5.10 to fix compact profiles with invalid values"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1760---2023-06-22",children:"v1.76.0 - 2023-06-22"}),"\n",(0,n.jsx)(d.h3,{id:"added-31",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"device usage Statistics"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-43",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"retry mechanism for configuration downlinks on coap endpoints"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-57",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'dont display Hardware Activation Link under "Ogranisation" when Featureoggle is disabled'}),"\n",(0,n.jsx)(d.li,{children:"routing for Hardware Activation"}),"\n",(0,n.jsx)(d.li,{children:"browser back button on pages with redirects"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1754---2023-06-13",children:"v1.75.4 - 2023-06-13"}),"\n",(0,n.jsx)(d.h3,{id:"added-32",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"helpfull error message on failed wmbus key imports"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1753---2023-06-06",children:"v1.75.3 - 2023-06-06"}),"\n",(0,n.jsx)(d.h3,{id:"added-33",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus LIB v1.5.9"}),"\n",(0,n.jsx)(d.li,{children:"DbStats for prometheus metrics"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-58",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"detail pages in Configuration now also highlight the correct navigation item"}),"\n",(0,n.jsx)(d.li,{children:"missing edit button on max Sub Orgs for admins of Parentorganisation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1752---2023-06-02",children:"v1.75.2 - 2023-06-02"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-59",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"cpu usage statistics for prometheus metrics"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1751---2023-06-02",children:"v1.75.1 - 2023-06-02"}),"\n",(0,n.jsx)(d.h3,{id:"added-34",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"cpu usage every 10sec sampled for prometheus metrics"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1750---2023-06-01",children:"v1.75.0 - 2023-06-01"}),"\n",(0,n.jsx)(d.h3,{id:"added-35",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Monitoring Service with host stats for Prometheus Metrics"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1740---2023-05-31",children:"v1.74.0 - 2023-05-31"}),"\n",(0,n.jsx)(d.h3,{id:"added-36",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Key import from Key Exchange Platform"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"fixed-60",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"prohibit wmbus_key manufacturer entry to become empty string instead of null"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-44",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update to Go 1.20"}),"\n",(0,n.jsx)(d.li,{children:"extend coap/coaps prometheus monitoring"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-61",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"error page on password reset"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1730---2023-05-18",children:"v1.73.0 - 2023-05-18"}),"\n",(0,n.jsx)(d.h3,{id:"added-37",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Lobaro Mbus Lib v1.5.6"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-62",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"SensusRF Keys were not found on parsing in Key Store"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"change",children:"Change"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"move from github.com/dgrijalva/jwt-go to github.com/golang-jwt/jwt"}),"\n",(0,n.jsx)(d.li,{children:"removed no longer used last Keycloak auth features"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1720---2023-05-16",children:"v1.72.0 - 2023-05-16"}),"\n",(0,n.jsx)(d.h3,{id:"added-38",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"SubOrganisations in tenant management"}),"\n",(0,n.jsx)(d.li,{children:"API Endpoints for deletion of Devices ParsedData and SensorData"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-63",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Configuration Area: Broken Firmware Upload Form"}),"\n",(0,n.jsx)(d.li,{children:"navigation bar is not shown after login"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1719---2023-04-17",children:"v1.71.9 - 2023-04-17"}),"\n",(0,n.jsx)(d.h3,{id:"changed-45",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update wMbus Parser to v1.5.5"}),"\n",(0,n.jsx)(d.li,{children:"remove broken DeviceTable Edit from Device Table Page"}),"\n",(0,n.jsx)(d.li,{children:'Using "Clear" on Table Config editor now clears config but doesn\'t save clear action directly'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-64",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Search for data table fixed when searching for a prefix e.g. 'my prefix*'"}),"\n",(0,n.jsx)(d.li,{children:"Format errors in logs"}),"\n",(0,n.jsx)(d.li,{children:"Hardware Activation detail page was not loading"}),"\n",(0,n.jsx)(d.li,{children:"Create hardware activation"}),"\n",(0,n.jsx)(d.li,{children:"Create device type without Organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1717---2023-04-05",children:"v1.71.7 - 2023-04-05"}),"\n",(0,n.jsx)(d.h3,{id:"changed-46",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"removed sensitivity in wmbus key import table search"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1716---2023-04-05",children:"v1.71.6 - 2023-04-05"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-65",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"unneeded re-renderings and double query execution on Data Table"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1715---2023-04-04",children:"v1.71.5 - 2023-04-04"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-66",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DeviceType Parser in Device Parser Editor"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1714---2023-04-03",children:"v1.71.4 - 2023-04-03"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-67",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"mixups in Parser Editor"}),"\n",(0,n.jsx)(d.li,{children:"Path problems in configuration area that lead to error page"}),"\n",(0,n.jsx)(d.li,{children:"missing navigation highlighting"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1713---2023-03-30",children:"v1.71.3 - 2023-03-30"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-68",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"error on search for Wmbus_Keys with long Sensus Device Id."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1712---2023-03-28",children:"v1.71.2 - 2023-03-28"}),"\n",(0,n.jsx)(d.h3,{id:"changed-47",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"some more improvements for wmbus_key refactoring"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1711---2023-03-27",children:"v1.71.1 - 2023-03-27"}),"\n",(0,n.jsx)(d.h3,{id:"added-39",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"update to wmbus Lib v1.5.4"}),"\n",(0,n.jsx)(d.li,{children:"Additional saftey in wmbus_keys transformation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1702---2023-03-19",children:"v1.70.2 - 2023-03-19"}),"\n",(0,n.jsx)(d.h3,{id:"added-40",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Dragino TCP Endpoint for NB-IoT at port 5600"}),"\n",(0,n.jsx)(d.li,{children:"CoAP .well-known/core endpoint"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-48",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'wMbus API parameter "ident" renamed to "indent" as it was meant to be'}),"\n",(0,n.jsx)(d.li,{children:"removed bloated debug log that was introduced in v1.61.7"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1701---2023-02-15",children:"v1.70.1 - 2023-02-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-41",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus LIB v1.5.3"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-69",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"out of index error in parser for lansen v3 co2 sensors"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1700---2023-02-01",children:"v1.70.0 - 2023-02-01"}),"\n",(0,n.jsx)(d.h3,{id:"added-42",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus LIB v1.5.2"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1641---2023-01-30",children:"v1.64.1 - 2023-01-30"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-70",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'race condition in HTTP integration that lead to "context canceled" before msg was published over http'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1640---2023-01-17",children:"v1.64.0 - 2023-01-17"}),"\n",(0,n.jsx)(d.h3,{id:"changed-49",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MBUS Lib updated to v1.5.1"}),"\n",(0,n.jsx)(d.li,{children:"HTTP integrations now run asynchronous in background"}),"\n",(0,n.jsx)(d.li,{children:"CompactFrame now uses EU Date Format."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-71",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"long running http integration blocks COAP call"}),"\n",(0,n.jsx)(d.li,{children:"white labeling on swagger API documentation improved"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1630---2022-12-07",children:"v1.63.0 - 2022-12-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-43",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus LIB v1.5.0"}),"\n",(0,n.jsx)(d.li,{children:"CompactProfile Support"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-50",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Domain Model endpoint meterData will work with empty body and use default Configuration from mbus lib"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-72",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"missing fields in Device Export"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1621---2022-11-25",children:"v1.62.1 - 2022-11-25"}),"\n",(0,n.jsx)(d.h3,{id:"added-44",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Timezone feature for date Handelbar helper"}),"\n",(0,n.jsx)(d.li,{children:"Support TimeString and Epoch in Handelbar date helper"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1617---2022-11-23",children:"v1.61.7 - 2022-11-23"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-73",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed mbus parser error on to short key ids in organisation key store."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1616---2022-11-23",children:"v1.61.6 - 2022-11-23"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-74",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Out of Index error on humanize of Lansen Co2 Meters with failed decryption."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1615---2022-11-18",children:"1.61.5 - 2022-11-18"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-75",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"moved lobaro-cron-validate dependency from github to npm repo"}),"\n",(0,n.jsx)(d.li,{children:"DeviceConfig: lobaro-cron-validate to support L and W (as Lists) on"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1612---2022-11-15",children:"v1.61.2 - 2022-11-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-45",children:"Added"}),"\n",(0,n.jsx)(d.p,{children:"_ wmbus LIB v1.4.2"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus: Lansen Co2 Sensors added DB Ambience level to DomainModel"}),"\n",(0,n.jsx)(d.li,{children:"meaningful error on decryption failure for DomainModel"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-76",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DomainModel: fixed missing MeterId for Multisensors (in specific: Lansen CO2)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1611---2022-11-04",children:"v1.61.1 - 2022-11-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-46",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus: Lansen Co2 Sensors added DB Ambience level to DomainModel"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-51",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser Lib updated to v1.4.1"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1610---2022-11-04",children:"v1.61.0 - 2022-11-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-47",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus: Subunit is now displayed for wmbus telegrams"}),"\n",(0,n.jsx)(d.li,{children:"wmbus: Lansen Co2 Sensors are now supported by he DomainModel"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-52",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser Lib updated to v1.4.0"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-77",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus: SubUnit and Tariff"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1600---2022-10-13",children:"v1.60.0 - 2022-10-13"}),"\n",(0,n.jsx)(d.h3,{id:"added-48",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"CONFIG CHANGES FOR DTLS CERTS NEEDED (see changed)"}),"\n",(0,n.jsx)(d.li,{children:"Mqtt Integration now also displays the publishInformation for the last execution where an error occurred"}),"\n",(0,n.jsx)(d.li,{children:"Cron validation support for: Last Day Of Week (L for Weekday), Nearest Week Day (W for weekday param), Last Day Of Month (L and L-x for day of month param)"}),"\n",(0,n.jsx)(d.li,{children:"support for raw downlinks over coap to Lobaro NB-IoT Devices"}),"\n",(0,n.jsx)(d.li,{children:"Link Device Type in Device Header (on Device pages) with Device Type page"}),"\n",(0,n.jsx)(d.li,{children:"Device Bulk operation: Export Hardware csv for devices"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-53",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser Lib updated to 1.2.3"}),"\n",(0,n.jsx)(d.li,{children:"removed config Value featureToggle.dtlsSecureCoapServiceEnabled"}),"\n",(0,n.jsx)(d.li,{children:"SecureCoapService is now started when server.dtlsConfig.dtlsCertDir and server.dtlsConfig.dtlsCertDir are set"}),"\n",(0,n.jsx)(d.li,{children:"Removed server.dtlsConfig.dtlsCertDir and server.dtlsConfig.dtlsCertName no longer have default Values"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-78",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"double 0x-prefixon wmbus Device Type at Application Layer for long header"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1590---2022-10-05",children:"v1.59.0 - 2022-10-05"}),"\n",(0,n.jsx)(d.h3,{id:"added-49",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Rest API: update Device"}),"\n",(0,n.jsx)(d.li,{children:"Fields to copy&paste GPS location for devices"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-79",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MQTT Integration UI: fix empty string displayed as QosByte instead of 0"}),"\n",(0,n.jsx)(d.li,{children:"MQTT Integration UI: edit on Retained Flag not saved correctly"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1581---2022-09-30",children:"v1.58.1 - 2022-09-30"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-80",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"GQL Schema for build"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1580---2022-09-30",children:"v1.58.0 - 2022-09-30"}),"\n",(0,n.jsx)(d.h3,{id:"added-50",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added QosBytes and retained Flag to MQTT integrations"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-54",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'DeviceType "makePrivate" now sets Org automatically if no org is set on deviceType'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1570---2022-09-23",children:"v1.57.0 - 2022-09-23"}),"\n",(0,n.jsx)(d.h3,{id:"added-51",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"delete device endpoint in REST API"}),"\n",(0,n.jsx)(d.li,{children:"org bulkoperation: change devicetype"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-81",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"CSV-Export of Devices from DeviceTable had no access to device properties"}),"\n",(0,n.jsx)(d.li,{children:"Org-Admin cant edit DeviceType Parser and Tables of own deviceType (private)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1560---2022-09-20",children:"v1.56.0 - 2022-09-20"}),"\n",(0,n.jsx)(d.h3,{id:"added-52",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'wmbus key store can now contain MFields as "Meter Id" so the key is used for all devices of a manufacturer'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-82",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'wmbus key import from csv destroyed entrys with "*" als Meter Id'}),"\n",(0,n.jsx)(d.li,{children:"removed Unknown property '_grid' for div component in Grid Component because it caused react/no-unknown-property rule to fail builds"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1550---2022-08-09",children:"v1.55.0 - 2022-08-09"}),"\n",(0,n.jsx)(d.h3,{id:"added-53",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"ATTENTION: Contains DB Transformations"}),"\n",(0,n.jsx)(d.li,{children:"Display Telegram Types on uplinks"}),"\n",(0,n.jsx)(d.li,{children:"more translations"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-55",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"sharped private device types"}),"\n",(0,n.jsx)(d.li,{children:"unique Device Addr (DB transformation can interrupt startup on failure!)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1541---2022-08-09",children:"v1.54.1 - 2022-08-09"}),"\n",(0,n.jsx)(d.h3,{id:"added-54",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"configurable ConnectionPool limits for Gorm DB Connection"}),"\n",(0,n.jsx)(d.li,{children:"added LastError Information for HTTP integrations"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1540---2022-08-09-yanked",children:"v1.54.0 - 2022-08-09 [YANKED]"}),"\n",(0,n.jsx)(d.h3,{id:"added-55",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"configurable ConnectionPool limits for Gorm DB Connection"}),"\n",(0,n.jsx)(d.li,{children:"added LastError Information for HTTP integrations"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1531---2022-08-05",children:"v1.53.1 - 2022-08-05"}),"\n",(0,n.jsx)(d.h3,{id:"changed-56",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated mbus Parser to v1.2.2"}),"\n",(0,n.jsx)(d.li,{children:"mbus Parser: Support for wired M-Bus Headers"}),"\n",(0,n.jsx)(d.li,{children:"mbus Parser: Support for Enhanced Identification Block"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-56",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MQTT Integrations can now listen for downlinks over MQTT"}),"\n",(0,n.jsx)(d.li,{children:'Handlebars "replace" helper'}),"\n",(0,n.jsx)(d.li,{children:"Handlebars config helper"}),"\n",(0,n.jsx)(d.li,{children:"Replay Device Data feature"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-83",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"org-admins can create password reset links and change pws of users (in same org)"}),"\n",(0,n.jsx)(d.li,{children:"org-admins can send password set emails for users (in same org)"}),"\n",(0,n.jsx)(d.li,{children:"fixed redirect on user creation in organisation menu"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1522---2022-07-28",children:"v1.52.2 - 2022-07-28"}),"\n",(0,n.jsx)(d.h3,{id:"changed-57",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'also sort devices table by deviceType on "last received"'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1520---2022-07-25",children:"v1.52.0 - 2022-07-25"}),"\n",(0,n.jsx)(d.h3,{id:"added-57",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Chirpstack join info as uplink"}),"\n",(0,n.jsx)(d.li,{children:'"in" operator for filters (text elem in array)'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-84",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Filters for the Devices Table from the Device Table Configuration of DeviceTypes"}),"\n",(0,n.jsx)(d.li,{children:"Import of big hardwareCSV files"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1511---2022-07-04",children:"v1.51.1 - 2022-07-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-58",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"max User Limit for organisations (first steps)"}),"\n",(0,n.jsx)(d.li,{children:"lorawan downlinks"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-58",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"API Tokens now can have the Roles Device-Admin and Org-Admin."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-85",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"removal of device ConfigValues removes them from the initial config also"}),"\n",(0,n.jsx)(d.li,{children:"base64 encoded telegrams are correctly handeled by the frontend now"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1490---2022-06-20",children:"v1.49.0 - 2022-06-20"}),"\n",(0,n.jsx)(d.h3,{id:"added-59",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"config values that are not part of deviceType schema can be removed from device"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-86",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser page: Base64 telegrams are now converted to base64url to fix parsing on base64 telegram with +,/ and ="}),"\n",(0,n.jsx)(d.li,{children:"broken password change on password change page"}),"\n",(0,n.jsx)(d.li,{children:"password could get broken by Ampersand on transport"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1480---2022-06-15",children:"v1.48.0 - 2022-06-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-60",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"org admins can create and manage users in their organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-87",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Firmware Management page: missing refetches, unwanted uuid in file name is no longer added"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1470---2022-06-13",children:"v1.47.0 - 2022-06-13"}),"\n",(0,n.jsx)(d.h3,{id:"added-61",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Bulk creation of Downlinks for Devices."}),"\n",(0,n.jsx)(d.li,{children:"Firmware File Management (upload/deletion..) page for Platform Admins"}),"\n",(0,n.jsx)(d.li,{children:"Api Endpoints for device and user creation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-59",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Selection box at top of Table now always adds all unmarked elements to exiting selection"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1462---2022-05-18",children:"v1.46.2 - 2022-05-18"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-88",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fix blockwise transport with coap server v2.5.0k"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1461---2022-05-18",children:"v1.46.1 - 2022-05-18"}),"\n",(0,n.jsx)(d.h3,{id:"changed-60",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"updated mbus parser for M\xfcllerRF bugfixes"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1460---2022-05-18",children:"v1.46.0 - 2022-05-18"}),"\n",(0,n.jsx)(d.h3,{id:"added-62",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'parser support for "mbus" and "M\xfcllerRF" frames'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1452---2022-05-13",children:"v1.45.2 - 2022-05-13"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-89",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Blockwise CoAP upload by rolling back to coap server v2.3.0"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1451---2022-05-11",children:"v1.45.1 - 2022-05-11"}),"\n",(0,n.jsx)(d.h3,{id:"added-63",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added gzip compression support to REST API and GraphQL"}),"\n",(0,n.jsx)(d.li,{children:"Allow integrations to access device Serial, Id, Name, Addr, and OrgId in URL / Topic"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1432---2022-05-09",children:"v1.43.2 - 2022-05-09"}),"\n",(0,n.jsx)(d.h3,{id:"changed-61",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"increase default and max pagination limit to 100.000"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-90",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"csv download uses pagination"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1431---2022-05-08",children:"v1.43.1 - 2022-05-08"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-91",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fix localization files path"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1430---2022-05-06",children:"v1.43.0 - 2022-05-06"}),"\n",(0,n.jsx)(d.h3,{id:"changed-62",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"enforce max Page size of 1000 items"}),"\n",(0,n.jsx)(d.li,{children:"use of default page size when no pagination config is supplied on request"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1420---2022-05-05",children:"v1.42.0 - 2022-05-05"}),"\n",(0,n.jsx)(d.h3,{id:"added-64",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"language files will be loaded from filesystem on startup"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1412---2022-05-04",children:"v1.41.2 - 2022-05-04"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-92",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["api param ",(0,n.jsx)(d.code,{children:"ident"})," corrected to ",(0,n.jsx)(d.code,{children:"indent"})]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1411---2022-05-03",children:"v1.41.1 - 2022-05-03"}),"\n",(0,n.jsx)(d.h3,{id:"changed-63",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"update mbus lib to fix parsing of invalid and negativ BCD numbers"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1410---2022-05-02",children:"v1.41.0 - 2022-05-02"}),"\n",(0,n.jsx)(d.h3,{id:"added-65",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"pprof endpoints"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-64",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"pass context of gql query to gorm for big querys so gorm can cancel execution in ctx.Done"}),"\n",(0,n.jsx)(d.li,{children:"updated GqlGen to v0.17.5"}),"\n",(0,n.jsx)(d.li,{children:"Log Warning on querys with more than 10.000 results"}),"\n",(0,n.jsx)(d.li,{children:"Error on Querys with more than 100.000 results"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-93",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Missing page parameter in initial query org/device/parsedData"}),"\n",(0,n.jsx)(d.li,{children:"high memory consumption during CoAP fw update"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-66",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"added ident param to endpoints of REST API"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1401---2022-04-28",children:"v1.40.1 - 2022-04-28"}),"\n",(0,n.jsx)(d.h3,{id:"added-67",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"added ident flag for api/mbus"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-94",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"frontend crash on device tag edit"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1400---2022-04-28",children:"v1.40.0 - 2022-04-28"}),"\n",(0,n.jsx)(d.h3,{id:"added-68",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DatasourceString so the technical source of a Uplink can be identified"}),"\n",(0,n.jsx)(d.li,{children:"Users can be deleted by admins"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-65",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Org is now required on user generation"}),"\n",(0,n.jsx)(d.li,{children:"improved space for dropdown selection in user creation modal"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1390---2022-04-25",children:"v1.39.0 - 2022-04-25"}),"\n",(0,n.jsx)(d.h3,{id:"added-69",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DTLS: configure if a device can fallback to unsecure coap in frontend"}),"\n",(0,n.jsx)(d.li,{children:"trim white spaces in config values"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-66",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"new mbus Parser Lib version (1.0.0) with fixed Storage Numbers"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1380---2022-04-25",children:"v1.38.0 - 2022-04-25"}),"\n",(0,n.jsx)(d.h3,{id:"added-70",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"roles field in user creation modal"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-67",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"login is set to email address for new users"}),"\n",(0,n.jsx)(d.li,{children:"Change color of admin role pills to red background"}),"\n",(0,n.jsx)(d.li,{children:"Fallback to nonsecure DTLS can be allowed for device"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-95",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"scrollbar for org chooser in user creation modal is presented for long org lists"}),"\n",(0,n.jsx)(d.li,{children:"DTLS: Lost updates on device (config/properties) for all Messages beside the last one on dtls connection"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1370---2022-04-21",children:"v1.37.0 - 2022-04-21"}),"\n",(0,n.jsx)(d.h3,{id:"changed-68",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"update CoAP implementation to v2.5.0"}),"\n",(0,n.jsx)(d.li,{children:"adjusted flight time for dtls handshake"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1360---2022-04-20",children:"v1.36.0 - 2022-04-20"}),"\n",(0,n.jsx)(d.h3,{id:"added-71",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"basic prometheus statistics for GraphQL API"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-69",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"updated PION DTLS to v2.1.3 to fix potential deadlock bug"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1350---2022-04-19",children:"v1.35.0 - 2022-04-19"}),"\n",(0,n.jsx)(d.h3,{id:"added-72",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added TLS support for MQTT integrations"}),"\n",(0,n.jsx)(d.li,{children:"Allow Variable Substitution in MQTT Topic"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-70",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update to GoLang 1.18"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-96",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MQTT publish leads to DB update error without information"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1340---2022-03-29",children:"v1.34.0 - 2022-03-29"}),"\n",(0,n.jsx)(d.h3,{id:"changed-71",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"make Database sslmode configurable"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-97",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"improved cron evaluation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1331---2022-03-24",children:"v1.33.1 - 2022-03-24"}),"\n",(0,n.jsx)(d.h3,{id:"changed-72",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"removed possible logging of Auth Header at TTN endpoint"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-98",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"look in to forwarded for Header Entry for mbus API requests IP ratelimeting"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1330---2022-03-23",children:"v1.33.0 - 2022-03-23"}),"\n",(0,n.jsx)(d.h3,{id:"added-73",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"count Access by IP on mbus API"}),"\n",(0,n.jsx)(d.li,{children:"monitor push integrations (mqtt/http) with prometheus"}),"\n",(0,n.jsx)(d.li,{children:"favicon can be configured in branding configuration"}),"\n",(0,n.jsx)(d.li,{children:"Device Config Form: config values with type CRON are now validated an error displayed on invalid crons"}),"\n",(0,n.jsx)(d.li,{children:'Translate hardcoded column names in global "Data" table'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-73",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"distinguish timeout and error returned by parser in parser monitoring"}),"\n",(0,n.jsx)(d.li,{children:"removed AppLauncher in Top Navigation"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1321---2022-03-04",children:"v1.32.1 - 2022-03-04"}),"\n",(0,n.jsx)(d.h3,{id:"changed-74",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Change DTLS config to request Extended Master Secret, instead of requiring it."}),"\n",(0,n.jsx)(d.li,{children:"Wrap Pion-Logger to Logrus, so that messages from DTLS-lib show up in log."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1320---2022-03-01",children:"v1.32.0 - 2022-03-01"}),"\n",(0,n.jsx)(d.h3,{id:"changed-75",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"COAP FW update: Use file table to look up files instead of metadata from filesystem"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-74",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Prometheus statistics for COAP Endpoint Runtimes and JS Parser Runtime"}),"\n",(0,n.jsx)(d.li,{children:'role "monitoring" protect prometheus endpoint with auth for admin or monitoring role'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-99",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"crash on sort click in Tables without default sort (data table)"}),"\n",(0,n.jsx)(d.li,{children:"DTLS parse EUI64 from device if EUI64 URN is presented instead of fail because of wrong IMEI URN"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1310---2022-02-17",children:"v1.31.0 - 2022-02-17"}),"\n",(0,n.jsx)(d.h3,{id:"added-75",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"new mbus Parser Lib Version can parse EiElectronics Smoke Detector HeadStatus content"}),"\n",(0,n.jsx)(d.li,{children:"On Panic in go-coap handler routine give Internal Server Error to client instead of killing the routine"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-100",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"sort no longer breaks on multiple change of sort direction"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-76",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Logg "Handle CoAP request" only as Debug because it spams the log'}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1300---2022-02-08",children:"v1.30.0 - 2022-02-08"}),"\n",(0,n.jsx)(d.h3,{id:"changed-77",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Updated to Go lang 1.17.6"}),"\n",(0,n.jsx)(d.li,{children:"Updated gqlgen and some other dependency's for Go Lang 1.17 update"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1292---2022-02-07",children:"v1.29.2 - 2022-02-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-76",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Show number of devices in organisation"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-78",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"CSV Imports (Keys, Hardware, Config Values) now skip empty lines in the csv file"}),"\n",(0,n.jsx)(d.li,{children:"Devices in Organisation Device List are now sorted by Last Received (descending)"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-101",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed bug that prevented admins to see the overview of devices without an organisation"}),"\n",(0,n.jsx)(d.li,{children:"CronLog issues"}),"\n",(0,n.jsx)(d.li,{children:"sort in tables never sorted descending on default sort"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1291---2022-02-02",children:"v1.29.1 - 2022-02-02"}),"\n",(0,n.jsx)(d.h3,{id:"added-77",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"API Endpoint for MeterReading Domain Model"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-102",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Link to devices Types from Admin hardware Page"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"1290---skipped-due-to-problems-with-build",children:"1.29.0 - skipped due to problems with build"}),"\n",(0,n.jsx)(d.h2,{id:"v1281---2022-01-14",children:"v1.28.1 - 2022-01-14"}),"\n",(0,n.jsx)(d.h3,{id:"added-78",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Http Integration: Validate Token and add hint if "Bearer " needs to be removed'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-79",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"remote device Config: truncate Spaces on Import from CSV"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-103",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"even admins where permited to update global device types"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1280---2022-01-12",children:"v1.28.0 - 2022-01-12"}),"\n",(0,n.jsx)(d.h3,{id:"added-79",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"array Filter Operators for GraphQL Querys with filter added"}),"\n",(0,n.jsx)(d.li,{children:"schedule uplink button at top of device config table"}),"\n",(0,n.jsx)(d.li,{children:"REST API: Admin Endpoints for API Token Creation and Deletion"}),"\n",(0,n.jsx)(d.li,{children:"REST API: GetDeviceDownlinks"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-80",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"only admins can see admins in organisation user List"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-104",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DTLS COAP: Fixed blocked accept() on dtls Listener after connection close by Handshake timeout and use of Multiple Threads."}),"\n",(0,n.jsx)(d.li,{children:"Filters where no longer applied after table page was changed"}),"\n",(0,n.jsx)(d.li,{children:"show usefully hint instead of JS error when user opens detail page of non exiting device or device he is not allowed to inspect"}),"\n",(0,n.jsx)(d.li,{children:"DeviceType Config Properties: Display Name no longer marked as required"}),"\n",(0,n.jsx)(d.li,{children:"UpdateDeviceType bug fixed: Orgadmins cloud not update private Device Types"}),"\n",(0,n.jsx)(d.li,{children:"wrong and annoying autofocus in downlink editor."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1272---2021-12-16",children:"v1.27.2 - 2021-12-16"}),"\n",(0,n.jsx)(d.h3,{id:"added-80",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"25h caching for Firmware files"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-105",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'SensusRF Ids will no longer spam the log as "invalid mbus id"'}),"\n",(0,n.jsx)(d.li,{children:"Housekeeping: fixed logging that can lead to nil pointer dereference"}),"\n",(0,n.jsx)(d.li,{children:"wmbus Data fixed some ugly UI case with missing new line"}),"\n",(0,n.jsx)(d.li,{children:"Integration Filters with empty Device Type List displayed all Device Types in frontend"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1271---2021-12-02",children:"v1.27.1 - 2021-12-02"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-106",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Housekeeping changed wrong DB Column Types in CronLog Table"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1270---2021-12-01",children:"v1.27.0 - 2021-12-01"}),"\n",(0,n.jsx)(d.h3,{id:"added-81",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added Housekeeping for SensorData and ParsedData"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-81",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"JS Parser timeout default increased to 250ms and timeout is now configurable."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-107",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Hadware Activation: correction of initialConfig=null handling"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1261---2021-11-30",children:"v1.26.1 - 2021-11-30"}),"\n",(0,n.jsx)(d.h3,{id:"added-82",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Undocumented REST endpoint to schedule downlinks ",(0,n.jsx)(d.code,{children:"POST /api/devices/{devId}/downlink?type=raw"})]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1260---2021-11-30",children:"v1.26.0 - 2021-11-30"}),"\n",(0,n.jsx)(d.h3,{id:"added-83",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Support for Tekelek downlinks via TCP/IP"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1250---2021-11-15",children:"v1.25.0 - 2021-11-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-84",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Support to filter array fields from REST API e.g. devices by tags"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1240---2021-11-12",children:"v1.24.0 - 2021-11-12"}),"\n",(0,n.jsx)(d.h3,{id:"added-85",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Filter for MQTT Integrations"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-108",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Fix TTN Integration Base64 decoding"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1230---2021-11-04",children:"v1.23.0 - 2021-11-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-86",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Cert registration for Lobaro Devices"}),"\n",(0,n.jsx)(d.li,{children:"MeteringData for wmbus devices"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1223---2021-10-15",children:"v1.22.3 - 2021-10-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-87",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus: Display Decrypted Raw Body on telegrams where Body can not be parsed yet"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-109",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Configuration CSV Import: Fixed that Header Column was also imported as value"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1220---2021-10-11",children:"v1.22.0 - 2021-10-11"}),"\n",(0,n.jsx)(d.h3,{id:"added-88",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Reschedule downlinks"}),"\n",(0,n.jsx)(d.li,{children:"Deletion of queued downlinks"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-110",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Wrong Regex prevented to add SensusRF keys with SensusRF meterId."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1210---2021-10-11",children:"v1.21.0 - 2021-10-11"}),"\n",(0,n.jsx)(d.h3,{id:"added-89",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'New Role "Device Admin" that is allowed all operations at devices of his organisation'}),"\n",(0,n.jsx)(d.li,{children:"Descriptive Name Column for Device configuration properties"}),"\n",(0,n.jsx)(d.li,{children:"Feature Toggle to configure if wmbus Parser API is public"}),"\n",(0,n.jsx)(d.li,{children:"Enabled users to change the language manually in frontend"}),"\n",(0,n.jsx)(d.li,{children:"Admins can create Downlinks with arbitrary JSON Data content."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-82",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"show more details about messages that cant be parsed (header/payload unparsable)"}),"\n",(0,n.jsx)(d.li,{children:"enhanced sftp Integration logging"}),"\n",(0,n.jsx)(d.li,{}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-111",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed some small UI details"}),"\n",(0,n.jsx)(d.li,{children:"Device -> Settings -> Parser displays the parser correctly again"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1200---2021-09-30",children:"v1.20.0 - 2021-09-30"}),"\n",(0,n.jsx)(d.h3,{id:"added-90",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus keys CSV import: hints and example file"}),"\n",(0,n.jsx)(d.li,{children:"SFTP Integration: Group By Device Tags"}),"\n",(0,n.jsx)(d.li,{children:"wmbusParser Api Tab Feature Toggle"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-112",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Use of Filter and Sort in Parsed Data Tables could lead to lose if Filters"}),"\n",(0,n.jsx)(d.li,{children:"some translation errors (DE Translation)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1195---2021-09-28",children:"v1.19.5 - 2021-09-28"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-113",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"missing german translations"}),"\n",(0,n.jsx)(d.li,{children:"Device config cancel button behaviour"}),"\n",(0,n.jsx)(d.li,{children:"API authentication for a customer specific endpoint"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1194---2021-09-24",children:"v1.19.4 - 2021-09-24"}),"\n",(0,n.jsx)(d.h3,{id:"added-91",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"translation for mouseover text on battery symbol"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-83",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"User tables now contain the list of roles given to the user"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-114",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"CSV import of wmbus AES Keys"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1193---2021-09-23",children:"v1.19.3 - 2021-09-23"}),"\n",(0,n.jsx)(d.h3,{id:"added-92",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Long header information are now displayed in wmbus detail component"}),"\n",(0,n.jsx)(d.li,{children:"feature toggle: hardware activation"}),"\n",(0,n.jsx)(d.li,{children:"header column in config value csv import is now optional by user choice"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-115",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"bugs that lead to keys missing after key import from csv"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1192---2021-09-20",children:"v1.19.2 - 2021-09-20"}),"\n",(0,n.jsx)(d.h3,{id:"changed-84",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Qundis Proprietary telegrams are now marked as such"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-116",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Data Tables now show BodyParseErrors on wmbus Detail component"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1191---2021-09-19",children:"v1.19.1 - 2021-09-19"}),"\n",(0,n.jsx)(d.h3,{id:"added-93",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:'Battery Symbol in Organisation "All" Devices overview'}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-117",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"bugs on sftp integration (front and backend)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1183---2021-09-13",children:"v1.18.3 - 2021-09-13"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-118",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed File upload in GQL (organisation Logo and so on...)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1182---2021-09-09",children:"v1.18.2 - 2021-09-09"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-119",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"organisation key store check for App and Link Layer IDs on key search"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1181---2021-09-09",children:"v1.18.1 - 2021-09-09"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-120",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Mode 7 Bug with short header fixed"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1180---2021-09-07",children:"v1.18.0 - 2021-09-07"}),"\n",(0,n.jsx)(d.h3,{id:"added-94",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Column filters for tables (text and boolean)"}),"\n",(0,n.jsx)(d.li,{children:"Admin area: Hardware Battery page (vbat table)"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-85",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"sort/filter: dots ons property names can now be protected by quotes"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-121",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wahr/falsch translations in DE where mixed up"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1174---2021-09-01",children:"v1.17.4 - 2021-09-01"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-122",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"removed broken Host/URL/Ip parsing in Sftp integration."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1173---2021-08-31",children:"v1.17.3 - 2021-08-31"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-123",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wrong port tried by sftp integration"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1172---2021-08-30",children:"v1.17.2 - 2021-08-30"}),"\n",(0,n.jsx)(d.h3,{id:"changed-86",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"added some missing translations"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-124",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"auth failure for actility"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1171---2021-08-30",children:"v1.17.1 - 2021-08-30"}),"\n",(0,n.jsx)(d.h3,{id:"changed-87",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Reworked Parser Device.getConfig"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1170---2021-08-30",children:"v1.17.0 - 2021-08-30"}),"\n",(0,n.jsx)(d.h3,{id:"added-95",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Localisation Framework added to code"}),"\n",(0,n.jsx)(d.li,{children:"German localisation added"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-88",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Old Device Config is now accessible in the Parser"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-125",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Error on update of SFTP Integration fixed"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1160---2021-08-18",children:"v1.16.0 - 2021-08-18"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"JSParser: Device Name, Address, Serial and Tags are now accessible."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1152---2021-08-18",children:"v1.15.2 - 2021-08-18"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"createMQTTIntegration fix ClientId in username"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1151---2021-08-16",children:"v1.15.1 - 2021-08-16"}),"\n",(0,n.jsx)(d.h3,{id:"added-96",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Device Config: Import Lists from CSV"}),"\n",(0,n.jsx)(d.li,{children:"Added Rest Admin Endpoints"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-89",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added more options for selectable CRONs in remote config"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1141---2021-08-03",children:"v1.14.1 - 2021-08-03"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-126",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"nil pointer dereference bug on http Integration"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1140---2021-08-02",children:"v1.14.0 - 2021-08-02"}),"\n",(0,n.jsx)(d.h3,{id:"changed-90",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Gorm update"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"added-97",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added Support for Compact Telegrams without DifVif FormatFrame"}),"\n",(0,n.jsx)(d.li,{children:"Device Bulk Edit: Devices Org can be edited to no Org."}),"\n",(0,n.jsx)(d.li,{children:"DTLS Support for NB-IoT Devices over COAP"}),"\n",(0,n.jsx)(d.li,{children:"Info Endpoint"}),"\n",(0,n.jsx)(d.li,{children:"Health Endpoint added"}),"\n",(0,n.jsx)(d.li,{children:"Tekelek devices get the suggested answer."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-127",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Error on HTTP Integration Edit without Auth."}),"\n",(0,n.jsx)(d.li,{children:"Crash on HTTP Integration with nil response from HTTP lib."}),"\n",(0,n.jsx)(d.li,{children:"Device Bulk Edit: Frontend crash when device without Org is edited."}),"\n",(0,n.jsx)(d.li,{children:"Security issue in Rest API fixed."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1132---2021-07-09",children:"v1.13.2 - 2021-07-09"}),"\n",(0,n.jsx)(d.h3,{id:"added-98",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Tekelek Device Support on TCP connection added. (Default port: 54345)"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-91",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"search for devices now considers serial"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-128",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"some drone issues"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1123---2021-07-02",children:"v1.12.3 - 2021-07-02"}),"\n",(0,n.jsx)(d.h3,{id:"change-1",children:"Change"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"dont check if dev exist for EUI assignment."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1122---2021-07-02",children:"v1.12.2 - 2021-07-02"}),"\n",(0,n.jsx)(d.h3,{id:"changed-92",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"updated Lobaro mbus Parser Lib to new Version"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-129",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"error on hardware import without org fixed"}),"\n",(0,n.jsx)(d.li,{children:"wrong visual representation for device config values of type ByteArray and value null"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11200---2021-06-15",children:"v1.12.00 - 2021-06-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-99",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Tagging for Devices"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11117---2021-06-14",children:"v1.11.17 - 2021-06-14"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-130",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"restart Platform on service crash (like coap service and so on)"}),"\n",(0,n.jsx)(d.li,{children:"TTN: Fix on TTN User Agent version mapping"}),"\n",(0,n.jsx)(d.li,{children:"log config paths, name and type to be loaded"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11116---2021-05-26",children:"v1.11.16 - 2021-05-26"}),"\n",(0,n.jsx)(d.h3,{id:"added-100",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"validate Device config Params based on Data Type in DeviceType Schema"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-131",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"ByteArray Config Values of NB-IoT Devices are now displayed in Hex (and not in base64)"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-93",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"DeviceTypes can now be created by users."}),"\n",(0,n.jsx)(d.li,{children:"Enabled users to share DeviceTypes with all organisations (public/private DeviceTypes)"}),"\n",(0,n.jsx)(d.li,{children:"wmbus Telegram Field picker for Data Table Config"}),"\n",(0,n.jsx)(d.li,{children:"Table preview in Data Table Config"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11112---2021-05-11",children:"v1.11.12 - 2021-05-11"}),"\n",(0,n.jsx)(d.h3,{id:"added-101",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"TheThingsNetwork V3 is now supported."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11111---2021-04-26",children:"v1.11.11 - 2021-04-26"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-132",children:"fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"integrations now forward all parser outputs (not only the last)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11110---2021-04-23",children:"v1.11.10 - 2021-04-23"}),"\n",(0,n.jsx)(d.h3,{id:"added-102",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Always decreypt PulseRf devices"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-94",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"new Time Selection UI Element"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v11109---2021-04-xx",children:"v1.11.09 - 2021-04-xx"}),"\n",(0,n.jsx)(d.h3,{id:"added-103",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"user list is now sortable by different values (default: lastLogin)"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1118---2021-04-15",children:"v1.11.8 - 2021-04-15"}),"\n",(0,n.jsx)(d.h3,{id:"added-104",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Added first version of SFTP csv export."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-95",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"display table filter by default"}),"\n",(0,n.jsx)(d.li,{children:"filter for data of last 90 days by default"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-133",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed some issues with the time filter in the Data Tab."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1116---2021-03-31",children:"v1.11.6 - 2021-03-31"}),"\n",(0,n.jsx)(d.h3,{id:"changed-96",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Tableconfig Data Tables: Values can now be configured to be part of the csv export but not to be shown in the table."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1115---2021-03-22",children:"v1.11.5 - 2021-03-22"}),"\n",(0,n.jsx)(d.h3,{id:"added-105",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow deletion of Properties from Device."}),"\n",(0,n.jsx)(d.li,{children:"Allow org Admins to delete device Data."}),"\n",(0,n.jsx)(d.li,{children:"Activation Page with all devices of organisation added."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-97",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"to hex parsing for byte fields at coap endpoint deactivated for further fixing"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1114---2021-03-16",children:"v1.11.4 - 2021-03-16"}),"\n",(0,n.jsx)(d.h3,{id:"added-106",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Devices which have an DevEUI Assignment connected to its address now display the EUI in ther detail Headers."}),"\n",(0,n.jsx)(d.li,{children:"COAP Messages: byte fields in payload are now converted to hex instead of base64."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-98",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"(wmbus)Key import from csv now pads to short keys with leading zeros"}),"\n",(0,n.jsx)(d.li,{children:"trim whitespaces on config values so they can no longer be added accidentally"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-134",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"corrupt cache.bin no longer crashes service on startup"}),"\n",(0,n.jsx)(d.li,{children:"org-admin are now allowed to see users in org"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1110---2021-03-03",children:"v1.11.0 - 2021-03-03"}),"\n",(0,n.jsx)(d.h3,{id:"added-107",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Frontend is now delivered by lobaro backend."}),"\n",(0,n.jsx)(d.li,{children:"Support for NB-IoT Gateways receiving Data over lorawan with DevEUI instead if IMEI as used Address"}),"\n",(0,n.jsx)(d.li,{children:"NB-IOT wmbus gateway devices will now receive lorawan messages also in the Device created with the IMEI as address"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1107---2021-02-26",children:"v1.10.7 - 2021-02-26"}),"\n",(0,n.jsx)(d.h3,{id:"changed-99",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Display Error texts instead of error mask for SensusRF"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1106---2021-02-18",children:"v1.10.6 - 2021-02-18"}),"\n",(0,n.jsx)(d.h3,{id:"added-108",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Support for Chirpstack Version: 3+ Api"}),"\n",(0,n.jsx)(d.li,{children:"Chirpstack v3+ protobuf support"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-135",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"SensusRF Padding Problem for long Serials"}),"\n",(0,n.jsx)(d.li,{children:"fixed Bug in unconfigurable DevEUI Blocks"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1102---2021-02-13",children:"v1.10.2 - 2021-02-13"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-136",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Display Meterdevice ID and Error Text for SensusRF parsing run without matching key"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1101---2021-02-12",children:"v1.10.1 - 2021-02-12"}),"\n",(0,n.jsx)(d.h3,{id:"added-109",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Registry for Lobaro (Device)-EUIs added"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-100",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Userlist search now also includes Organisation Name"}),"\n",(0,n.jsx)(d.li,{children:"Unused Firefly and PackageRoute Stores removed"}),"\n",(0,n.jsx)(d.li,{children:"Unused columns and indexes removed"}),"\n",(0,n.jsx)(d.li,{children:"Index unification over Platform instances"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-137",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"fixed Bug preventing to delete Organisations with attached mbus keys"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v1100---2021-02-08",children:"v1.10.0 - 2021-02-08"}),"\n",(0,n.jsx)(d.h3,{id:"added-110",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Integrate SensusRF parsing into wmbus API"}),"\n",(0,n.jsx)(d.li,{children:"Link parsed data with uplinks"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-101",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"wmbus Parser now also supports Base64 input"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-138",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Improved authentication role checks"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v192---2021-01-25",children:"v1.9.2 - 2021-01-25"}),"\n",(0,n.jsx)(d.h3,{id:"added-111",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Serial Numbers are now imported from hardware csv and can be seen in the platform."}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"191---2021-01-15",children:"1.9.1 - 2021-01-15"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-139",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"mqtt service startup failure"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v191---2021-01-13",children:"v1.9.1 - 2021-01-13"}),"\n",(0,n.jsx)(d.h3,{id:"added-112",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Endpoint for Loriot LoRaWAN Network Server at /api/loriot/data"}),"\n",(0,n.jsx)(d.li,{children:"Configuration for server.dataDir (Default: './data')"}),"\n",(0,n.jsx)(d.li,{children:"Branding configuration: The frontend only shows customer brand specific links, logos etc."}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-102",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Parser cache is persisted regularly (60 seconds) and on graceful shutdown"}),"\n",(0,n.jsx)(d.li,{children:"Parser cache is loaded from file on startup"}),"\n",(0,n.jsxs)(d.li,{children:["Parser cache file is located at ",(0,n.jsx)(d.code,{children:"/parser/cache.bin"})]}),"\n",(0,n.jsxs)(d.li,{children:["From ",(0,n.jsx)(d.code,{children:""})," dir only '/app' and '/org' folders are public via HTTP to avoid leaking other data files like the parser cache"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-140",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Server crash related to MQTT Publish Integration"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v187---2020-09-29",children:"v1.8.7 - 2020-09-29"}),"\n",(0,n.jsx)(d.h3,{id:"added-113",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"last login field for user"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-141",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Server now using CoAP port from config"}),"\n",(0,n.jsx)(d.li,{children:"Server does depend require Keycloak during startup"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v185---2020-09-08",children:"v1.8.5 - 2020-09-08"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-142",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Deduplication of CoAP messages for blockwise requests"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v184---2020-09-02",children:"v1.8.4 - 2020-09-02"}),"\n",(0,n.jsx)(d.h3,{id:"fixed-143",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Index row size for device textsearch was too big"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v183---2020-08-28",children:"v1.8.3 - 2020-08-28"}),"\n",(0,n.jsx)(d.h3,{id:"added-114",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["REST API to update device configurations: ",(0,n.jsx)(d.code,{children:"/api/devices/{devId}/config"})]}),"\n",(0,n.jsx)(d.li,{children:"REST API to fetch all parsed data of all devices inside an organisation: /api/devices/parsed-data"}),"\n",(0,n.jsxs)(d.li,{children:["HTTP Integration now supports URL Variable substitution for the device ID via ",(0,n.jsx)(d.code,{children:"{device.id}"})," and data via ",(0,n.jsx)(d.code,{children:"{data.some.value}"})]}),"\n",(0,n.jsx)(d.li,{children:"Internal API and Schema for integration input filters"}),"\n",(0,n.jsx)(d.li,{children:"BasicAuth credentials for API Tokens as alternative authorization mechanism in the REST API"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-103",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Update to latest version of mbus parser to fix description issues with some telegrams"}),"\n",(0,n.jsx)(d.li,{children:"Drop unused database tables and APIs from legacy projects"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v170---2020-06-04",children:"v1.7.0 - 2020-06-04"}),"\n",(0,n.jsx)(d.h3,{id:"added-115",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow sending user invitation mails with password reset link"}),"\n",(0,n.jsx)(d.li,{children:"Allow user to restore a lost password"}),"\n",(0,n.jsx)(d.li,{children:"GraphQL API: Devices can be filtered by DeviceTypeId"}),"\n",(0,n.jsx)(d.li,{children:"Verify that server.frontendUrl is set in configuration"}),"\n",(0,n.jsx)(d.li,{children:"Add TTN REST Endpoint /api/ttn/data"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-104",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Prevent spaces in device addresses"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v160---2020-04-09",children:"v1.6.0 - 2020-04-09"}),"\n",(0,n.jsx)(d.h3,{id:"added-116",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow org-admin to edit wmbus Keys"}),"\n",(0,n.jsx)(d.li,{children:"Allow org-admin to upload organisation logos"}),"\n",(0,n.jsxs)(d.li,{children:["Documentation for REST API endpoint ",(0,n.jsx)(d.code,{children:"/api/devices"})]}),"\n",(0,n.jsx)(d.li,{children:"Parser: Record.getReceivedAt() to access the uplink message received_at date"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"changed-105",children:"Changed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Chirpstack device synchronisation reports more details"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"removed-1",children:"Removed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Gateway entity that is no longer used"}),"\n",(0,n.jsx)(d.li,{children:"Hardcoded MQTT publishers that are no longer used"}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"fixed-144",children:"Fixed"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Allow to remove App in device via GraphQL API"}),"\n",(0,n.jsx)(d.li,{children:"NB-IoT Data is saved for all matching devices, not just one"}),"\n",(0,n.jsx)(d.li,{children:"Downlink messages created_at was set to null after update"}),"\n",(0,n.jsx)(d.li,{children:"Allow to update config values that are not defined in Device Type"}),"\n",(0,n.jsx)(d.li,{children:"Allow org-Admin to edit wmbus Keys"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"v150",children:"v1.5.0"}),"\n",(0,n.jsx)(d.h3,{id:"added-117",children:"Added"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Synchronization of devices with Chirpstack"}),"\n"]})]})}function v(e={}){const{wrapper:d}={...(0,l.R)(),...e.components};return d?(0,n.jsx)(d,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},8453:(e,d,i)=>{i.d(d,{R:()=>r,x:()=>a});var n=i(6540);const l={},s=n.createContext(l);function r(e){const d=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function a(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),n.createElement(s.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bb44c6b0.748914da.js b/assets/js/bb44c6b0.748914da.js deleted file mode 100644 index 0eab97b2..00000000 --- a/assets/js/bb44c6b0.748914da.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2346],{1866:(A,e,n)=>{n.r(e),n.d(e,{assets:()=>d,contentTitle:()=>t,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var s=n(4848),i=n(8453);const r={sidebar_position:0,displayed_sidebar:"cloudSidebar",title:"Overview"},t="Lobaro IoT Platform",o={id:"platform/index",title:"Overview",description:"---",source:"@site/docs/platform/index.md",sourceDirName:"platform",slug:"/platform/",permalink:"/iot/platform/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,displayed_sidebar:"cloudSidebar",title:"Overview"},sidebar:"cloudSidebar",next:{title:"Integrations",permalink:"/iot/platform/integrations/"}},d={},l=[{value:"Features",id:"features",level:2},{value:"Overview",id:"overview",level:2}];function a(A){const e={a:"a",code:"code",h1:"h1",h2:"h2",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...A.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"lobaro-iot-platform",children:"Lobaro IoT Platform"}),"\n",(0,s.jsx)(e.hr,{}),"\n",(0,s.jsxs)(e.p,{children:["The Lobaro IoT Platform operates as a ",(0,s.jsx)(e.strong,{children:"Head End System for IoT Devices"}),". The Platform is optimized for but not limited\nto handle Lobaro devices."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["Public Lobaro instance: ",(0,s.jsx)(e.a,{href:"https://platform.lobaro.com/",children:"platform.lobaro.com"})]}),"\n",(0,s.jsxs)(e.li,{children:["For On-Premise hosting check out ",(0,s.jsx)(e.a,{href:"./license",children:"Hosting & Licensing"})]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"The documentation will always reference the Public Lobaro instance."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.img,{alt:"img.png",src:n(252).A+"",width:"2656",height:"1506"})}),"\n",(0,s.jsx)(e.h2,{id:"features",children:"Features"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Multi tenant (Organisations) with branding / white labeling"}),"\n",(0,s.jsx)(e.li,{children:"IoT Device Management"}),"\n",(0,s.jsx)(e.li,{children:"Support for all Lobaro Devices"}),"\n",(0,s.jsx)(e.li,{children:"Possibility to integrate 3rd party IoT Devices (LoRaWAN, NB-IoT, ...)"}),"\n",(0,s.jsx)(e.li,{children:"Device configuration"}),"\n",(0,s.jsx)(e.li,{children:"Firmware updates"}),"\n",(0,s.jsx)(e.li,{children:"Data parsing and persistence"}),"\n",(0,s.jsxs)(e.li,{children:["Device protocols:","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"LoRaWAN Network Server"}),"\n",(0,s.jsx)(e.li,{children:"CoAP"}),"\n",(0,s.jsx)(e.li,{children:"HTTP"}),"\n",(0,s.jsx)(e.li,{children:"Manufacturer specifics"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["Connect devices via:","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"LoRaWAN"}),"\n",(0,s.jsx)(e.li,{children:"NB-IoT"}),"\n",(0,s.jsx)(e.li,{children:"LTE-M"}),"\n",(0,s.jsx)(e.li,{children:"GSM / LTE"}),"\n",(0,s.jsx)(e.li,{children:"etc."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.li,{children:"APIs to access or forward data to Use-Case specific applications"}),"\n",(0,s.jsx)(e.li,{children:"Scaling to handle thousands of devices"}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"We offer free access to the platform for tests and integrations (up to 12 Month) with the purchase of any Lobaro device\nin our shared instance. In addition we offer private instance hosting or On-Premise (any Server with Root access)."}),"\n",(0,s.jsx)(e.h2,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.img,{alt:"img.png",src:n(344).A+"",width:"921",height:"114"})}),"\n",(0,s.jsx)(e.p,{children:"You can find your organisations name next to the Logo. Admins can change their organisation by clicking the small Icon\nnext to it."}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Devices:"})," Manage all devices of your organisation."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Data:"})," See incoming data of all your devices."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Integrations:"})," Manage data connections to and from other applications. (See: ",(0,s.jsx)(e.a,{href:"/iot/platform/integrations/",children:"Integrations"}),")."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Organisation:"})," Manage all organisation related data."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Configuration:"})," Platform administration of global entities independent of the Organisation (Admins only)."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Tools:"})," wMbus Parser and Hardware Activation."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"The platform shows device data received via various data sources like LoRaWAN, NB.IoT, GSM, etc."}),"\n",(0,s.jsxs)(e.p,{children:["The connection to a device in handled by a ",(0,s.jsx)(e.code,{children:"Datasource"}),". Incoming data is mapped to a matching ",(0,s.jsx)(e.code,{children:"Device"}),". Raw data is saved\nas ",(0,s.jsx)(e.code,{children:"Uplink"})," Message. The ",(0,s.jsx)(e.code,{children:"Uplink"})," Message gets processed by a ",(0,s.jsx)(e.code,{children:"Parser"}),". The result of the parser is saved as ",(0,s.jsx)(e.code,{children:"Device Data"})," used\nfor visualization inside the dashboard and in outgoing APIs."]}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.img,{alt:"img.png",src:n(5395).A+"",width:"836",height:"82"})})]})}function c(A={}){const{wrapper:e}={...(0,i.R)(),...A.components};return e?(0,s.jsx)(e,{...A,children:(0,s.jsx)(a,{...A})}):a(A)}},5395:(A,e,n)=>{n.d(e,{A:()=>s});const s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0QAAABSCAIAAAD7HINiAAAYAElEQVR4Xu2di3dU1b3H+z+xlEVvLYsrRbAqyqUIyJUCUi6CcBFbxVcBKUKBaLRAIVCgEC4Iogi0ochTQ0CJCZAECO9AQiBDgASD+Oj0O/O72d2ek5mcTGZm/86c73d9Fyszc+Y89uO7P/ucM4efxCmKoiiKoqjQ6ifeNyiKoiiKoqjwiDBHURRFURQVYhHmKIqiKIqiQizCHEVRFEVRVIhFmKMoiqIoigqxCHMURVEURVEhFmGOoiiKoigqxCLMURRFURRFhViEOYqiKIqiqBCLMEdRFEVRFBViEeYoiqIoiqJCLMIcRVEURVFUiEWYoyiKoiiKCrEIcxRFURRFUSEWYY6iKIqiKCrE6h7m2troQnBhqL09fvNmPBYrNN++Hf/uO+/BqpJ/n+kCtnIh0AosB3A4CDfl8u82nU//8IO3Rmx1D3NQa2v82LF4bS0dVp8+7a3T0KmlJX78eLymJnEshWfUEbrYlSveo9YjlP+ZM3QkfP68t/b1CO2wurowc+DkyYQx2qrVqVPepkLnzZWV2YC5eCfPnTvnRUVav69eTSRFqHXtWiLmcCD+oysYX7+e6LFnz3qPXYkE5vy7TReYL13SC3OSA42N3n0uGGM6hykr+ppOAeYKO4Q1O2swFyfPhdZhh7m7d+NVVfHmZu9xFaQRlzhShSLMRcRqYQ45UF2dmPP497mQ3NSUGGfv3/cevgYR5hw6mzAXJ8+F02GHORld/MdVkG5sjJ844S0BDSLMRcRqYS46OXD2bCIHFIow59BZhrk4eS6EDjvM1dQkZqv+4ypUV1drnJcT5iJitTAXnRxoaEj0NYUizDl09mEuTp4Lm8MOcydOROUaq/j48fi9e95CcC7CXESsFuaikwNqE5sw59A5gbk4eS5UVhsNARWdEBcT5miHJsw5t9rEJsw5dK5gLk6eC4/VRkNARSfExYQ52qEJc86tNrEJcw6dQ5iLk+dCYrXREFDRCXExYY52aMKcc6tNbMKcQ+cW5qBbt8hz2q02GgIqOiEuJszRDk2Yc261iU2Yc+icw1yc5+fUW200BFR0QlxMmKMdmjDn3GoTmzDn0PmAuTjPz+m22mgIqOiEuJgwRzs0Yc651SY2Yc6h8wRzcfKcYquNhoCKToiLCXO0QxPmnFttYhPmHDp/MAfdvk2e02i10RBQ0QlxMWGOdmjCnHOrTWzCnEPnFebi5DmVVhsNARWdEBcT5miHJsw5t9rEJsw5dL5hDrpzhzyny2qjIaCiE+Jiwhzt0IQ551ab2IQ5h3YAc3HynDKrjYaAik6IiwlztEMT5pxbbWIT5hzaDcxBbW3kOS1WGw0BFZ0QFxPmaIcmzDm32sQmzDm0M5iLk+fUWG00BFR0QlxMmKMdmjDn3GoTmzDn0C5hDmpvz5Dn9u2r7NOpfv36TZ/+2yNHTrW0/NO/JN2t1UZDQHUb4o2N91566TXTYIYOfWrlytKrVzv8SwY0Vrh27Zby8hr/R3lweGFu4cL3UBEoPfOOVA3e9y9s+/z5W888M7a0dLt8JUjhIyLwFXzR/5GxbP1nP3vo0KHjno8QJu+/vxqtRTZKG4cX5jw5IFFQUlLa2PiNf2HNVpvY3cKc5ijO+r7l2Y5hLp4pzyGpBw9+9LPPjiOsT568UlS0/Oc/779p084gPId09owoEbfaaAiogCH+1luL0FrOnbtZVlY+duxzv/nNlPr6Fv/CQXz5cvukSS8sX77O/1EeHHGYC1j4wWEOwb1o0Z880XHmzI1Ro/67D2HO57DDnOQAjO6/devuIUMemz//nevXv/cvr9ZqEzsgzOmM4t7sW5C0ybXdw1w8I55D2aETfvXVBXmJIN64cftjjw0176QxYc5jtdEQUAFD3CYG9M9x4yYuWbIsXCEujjjMBXSQeJWt//KXj4PbQG/2R3/722eYLj711PAebTQKDjvMeRqbVPSXX9b7l1drtYkdEOZ0RnFv9i1I2uTaKmAu3nOe88BcLBExbRMnPv/++6vlJUp/06adQ4c+hbn1yJFj9u+vBPDJkGDOo0pMd7mkrAT5/uabf+iX1MyZs+rqmuR9LFBWdhgLy8lYfN1Utme4susYm5s+/bcrVmzo33+AbBorfO21uVg53pk3b8mFC7f96/fsUi6sNhoCKrMQ/+ijTzFU19Q0ykvUBaoYdTFw4KCSktJr1+6jTmfPXjB/fpGpXNQmvnLy5BUPW+S5HpXA3K1bt+yXvYc5U6roJn379sUQa3qWXeD23/gXf//97+UTJvwPCnnMmHGHD9fKmu2uJ6H88stvXrnytb0/svWiouWAObQH8z5q/9VX58yZsxCrNbVsggL7hvl6ZeV5eR91euBAFSbx2AE0nmXL1prLdqkCJE3mNDTcffvtd9GQ4KVL16AFmnabo+bUUxcYzGEQwVCC1pJc4BtUHyrRU8XS5Nav/2jSpKnSqFBN77yzAnUkS1ZU1JkVovsjBKQGUZVY0mwaw9OsWXMCnnRIYz2J/c0339gvM4C5mC+K/QWIdr5yZSliwfRfFOCTT/7XoUOJS3N2FKMGkd6IDk+9BOk7QfYNK8RqsXIzTMi3Opmij/m6f0nP5rJuLTAH3b3bA57zwxzqBhWPvG5quo+/V6/ehKxEnSHHV6xYL3OvlpYfLl68g4/QLE6dakY1pFoSK0S7wWKIYFRkdfXlGTNeRt3g6/ho27Y9Dz/8iw0bPj537ubOnQcxs9+4cbs0jvQw99Of/gfWibkg1ikDzJtvzsffOJDJk6fPmjVbvrhnz1EcHdaPZbB72KUjR075CyFb1hMNAfXMM8+Ulpaal5mFOJIaFYdhONY52EtdoCWgPaDYUaGoKfDB+fOtsWQDW7ToT6+/Pq+5+Vs7QfJfj0pg7tNPP501a1Ztba28zBbMDRv2q927K1BixcUl6C+oAvNRlzAnqQ2Gk04K/JJOaroeOjJi4Xe/e0OGVduy9b/+9UOMsqA3E7gyVKBrmw21JM/9o8HgTewboubpp0cjQ/AR4gI1i/pNXpo5jMYDCMPyqQIkTeYA8tDG8BHWIyWAozPtNkfNqafWA3OjRo3qfQ4ACDDcfv75SRT+vHmLn312/LFj5+rqroEnzPlaaXKo/ZKSjUiMq1c7MMezl0SjxRwvlhw10NgQAmhC+BTLYJ1Ys2x6wID/xMxh375j/qbYI+tJ7GnTpq1evfpeZx5lBnN2FKcqwCNHTg8fPtKM+OiVEyc+f+lSm50GWKyo6M+jRz+LOpXug15cVXUxFqzvdLtv+Iqnp69Z8wG6M3YDsQBGRDcX3OxySc/msm5FMBfvCc/5YS5mDRXoKojmLVvK5H0UKLqlgfdS6zJrmiXtGRuMRF6+fB36NuIYA4YM9vLR1q27Dbynhzkz0vhfyviBTJGbADC6yPrlJIH/np4sWk80BBRgDnOgIUOGbNiwIZ5piNv1i5q16wIVKgx3+vR1jNmyjJz6lfM3Hp7Icz3qgTmZjALpampqsgVzQm+xZDQjx2X5NDCHoJRxFEaxo/AlFqTrIbuR76Dt+q5ufDFbR/o/9thQc60NyQsOQ482G6qtbcRYgoYhC0gImH0wfRwuKyvfuPETEH+qAEmfOdgNuwTMmbncNaeeWhXMofk9+uijgnQZ5ACqA7QtkA00nzJlxsGD1fIRRnGMx1J90uRM7XvOBuElara6+hL+3r59n5y8l4/QrqRByqZN9fXSehIbMIcqGDBgwKpVqzo6OjKDObunpCpAQNLUqS9KmaNzYVItV+HsupDsNT9mMmUesO90u2/r1m19661FEl8tyZNHJs3sgT79krmzLpiDvv46EM+lhznPwp6+V5r6njl7SZlYo59jImUvjE6O8QPDhnkHMY32J/WdHubMR4jpuXP/iDr2920JdJkKiDEdTLXDWXFPowHzsPb29tbW1hs3bjQ1NTU0NFy4cKG+vr62tvb48eOVlZVHjx4tLy8/ePDg3r17d+/evWvXru3bt3/44YebN28Gfq1duxY9f0Uv9MgjjwhGQA899FBFxd2ehnjM6qXy6ZIly8xHZhYo1SQpgBoH2Amym3bipB4rK78bMuRJOfxF7iQ5bvTCC7Nra7u5s8TfQ+2qkVI19BNLXuOQ7pMG5uwMRZljXm7D3KpV/4dawBTf3g3/1qWzy+xZqB1rtjeEtWE9mHnLF6XeZbflzNz8+UX41FyRj6UOEI/TbCWWLDHZSu6aU08NmNu06QtT795mkUcNHDjQaoB9ysvbguSA/ZU+iXY701z+tm2P4p6WiVpGdY8YMWrHjgNoLfa3UFlydUheYjaIxUzImDGol0Zi79nTYA7BWy551OOPP26VZZ+ysku9hLlUBRhLNng5fY4QRhTLEGx3H8yCMC/C7Miz0YB9p9t989hOMw/MpVkydy4cmBP+Ne3g7NmbRUXLBw4cZNpZKphLs+SFC7flo759+6LPywlb/6btrh4Q5rpsN+LDh2v79x9gdkb07LPjzbmfrDs4zJWVlfVJPgsGCIXZ2KBBgzAtfuKJJ4YNGzZixIjRo0ePHTt2woQJkyZNmjJlyvTp02fOnPnKK6+8/vrrs2fPnjdv3oIFCxYvXlxcXLx06VIvoPVENsxhB44c6QgS4p7SNufPZd7277JOCjUunb+srBzjMSIb/V+uscasBOlyzeLc1SNg7oMPPil1LdSpOa4HHnigqGhdXd0P/r217Q81uwD9MIe/kdpnztzIDOZQiajZkSPHbNu2x96NLrde2nmGFTN7oLznzshPPtlvVeP/y6TN0aNnwG1y0+Q776wwF9G6DJBY6sxBY/MMCQbmctecemrA3KFDV72twYWGDBliigJUUVHxdZAcML9mPZ+8BG8vcPLkVfRxu5y7hLnkqhL3Zsldj2PHPoeswADU3Pzd73//tvmu0ebNu7IOcxUVrd7icKHhw4ebwxw8ePCBA80ZwJyJ4jQFGEvOmsaMGQeSA7TJNdZY2jQwDth30u9bLHlKb8uWMrnxTpQK5tIsmTvrgrneXGaVCx9y6lXmxPPmLcEwgD7m6Ug2VKVfUoz38SmWQcTX1jaidocPf/rIkdNmAcykAf49grn0Z3QwgKH1mMSBk7fadDNSZuzgMKdEcpl13Lhxe/fujWd0eSVmXRyXT1euLLULHBZuQ9Wj2+/ZcxTtxNwjbxLEST2qusz64IMPgs5jsViQy6zr128zKSy+erXjxRdnyWlRKVV7yESIS/cxBW4W6zK+PTCHiDh27FxZ2WH0XHMzu227YYDesNj+/ZXz5xfJr17sDWFtI0aMAo3ZtYkDsesdX6moqENrmT17gTQesSdA0mTOvuQvbMzd1rEfn5nLUXPqqbVdZh0/fnxvcsAY1YHGs2LFehnj7dbob5nGWBhfefjhX8gvb7DyOXMWnj/falcTttvlyJKx9SS2nJ5HRezcuTOe6T1znvuUuizAWOdgjYXRPc0vHaVqpGDTnJkL0ne63bc1az5A70YflxPw9oDugbk0S+bOimBOSA4x4d9Lvz0w1/LjR5N4To0ic59//n9tmMP4IQ8DTLMk3pw27SVzq41ZUqgx1T1zJSUbp0590Uz4duw40CXMyUv7Xit8HXP3L744I+vfsOFjs37sak4fa6knGgLKxLcogxCXXy3Ib85bko+HnTlzlqk1vGmAQy6pvPTSq889N/n06evypp0g+a9HPTAHjLt586a8DAJzZWXlnluPpVvZdyL29J65NDAnH8l6/D9ljf24YUhFT5o0FX0Z++nZkKAeuNB8t6HhLubfGA/ee2/Vu++uMBdYzS6lCpA0mYPGM2zYr7q8Zy53zamn1gNzEyZM6GUO2PaMKadONWPS3iXMYRlUmee3rlKDGAswipvH3KCyktDQ9WmCjK0nsQFzu3btMi8zgDk7imOpC1BeApJQ8r/+9URzMsUu/K9+fM8cuueCBcXr1m0N2HfS75vn05bkD2xtmDMcmX7J3FkLzMmjSQKSXCxZdoM7Hxr85Zf1CxcW2w8NlsqbMeNlfISqxeDax7p4ipEDnfbzz09eunQnzZLozMB5+ZWi58dN/l+zyq9aYskbNvv3HwDUQzv4+OO92FAqmJOGIuuXH7uZ8QYHYtaPkW/y5OnLlq3N3RRcTzRkpoAhLpdXUOxyJ5b9NMiqqotDhz5l6rqo6M+TJ08zTxjB0N63b9+5c/9oBmw7QfJfj0pgzqMgMCc/VQNvoUhRbvJYTlNcUqr4dM+eo/XJn3kG+TVrtzAX6+zLdpqLPbG7L3ll1qC5vSFUfXHxSnRn9He8jz0cM2bctm3/iCXPB5haPny4FkORnNhLFSBpMke2Ir9mlXZo/5o1R82pp9YDcx4FzIFUMAdeR8mjm6MXS8vsk+Iy6+XL7ag1+cWlNFTze2RUDSrXfLR27RY0SKy5UGHOo4AwlyaKUxWgfIpCHjRosH26xNNJ7V+zol7AdsLcQfpO+n2TOT9ayK5dh9BCioqW9+vXzwzowImBAwft2IFwaE2/ZO6sAuZ6SnKxZOwmr0QnBHiaMeMVz3/nhSqUp7xgdgWoQlGaa2GoKizfp/NKfJolzbPH+iX/xzBzy0tL6ufMXU8+QUqec4Ov2IONB+bs9eMQFi9e2uXzybCqXP+HM2qjIaAChrhpMMOHj/T/Py12Xb/22lz7nugzyf8MwJwvif04Qezv5qcewwtzseSceOnSNZj/oEzwL/42FWFKdXrnc+YwTZfA7SXMxZITMKzQPIVO7BndBbNKSjZ69kdeSteW26SQFdg36fV2LSPQ33333/fMpQqQNJmDUWrBgmJ5yFaa58xlsTn11IUKcyje/fsrpXjRDOSxROvXb4v5YC5mPQsNlTh+/CS5Z87/EZjv6NEzZtOEuSBR3GUBiuVKq+mhMV8ntZ8UaH83SN/pdt/sZ0AC1/7yl8322ThM4bBRuWMkzZK5s3uYy4Dk6OxabTQEVLchXmAONcylsX/IjKABrwYLriQfx2BuD1Li8MJcwVhtYncLc3Tu7BjmSHIarDYaAio6IS4mzBWqm5ruv/HGH4qLV9bVXZPLrE92PvVUjwlzzq02sQlzDu0S5traEiR34YJ3n+g8W200BFR0QlxMmCtg19U1ydMx+vr+nyglJsw5t9rEJsw5tDOYI8npsdpoCKjohLi4UGGODoUJc86tNrEJcw7tBubu3CHJKbLaaAio6IS4mDBHOzRhzrnVJjZhzqEdwBxJTpvVRkNARSfExYQ52qEJc86tNrEJcw6db5i7fZskp85qoyGgohPiYsIc7dCEOedWm9iEOYfOK8wJyV286N0J2q3VRkNARSfExYQ52qEJc86tNrEJcw6dP5i7dYskp9RqoyGgohPiYsIc7dCEOedWm9iEOYfOE8yR5DRbbTQEVHRCXEyYox2aMOfcahObMOfQ+YC51laSnGqrjYaAik6IiwlztEMT5pxbbWIT5hw65zAn5+TQ//3bppVYbTQEVHRCXEyYox2aMOfcahObMOfQuYU5OSdHklNutdEQUNEJcTFhjnZowpxzq01swpxD5xDmSHJhsdpoCKjohLiYMEc7NGHOudUmNmHOoXMFcyS5EFltNARUdEJcTJijHZow59xqE5sw59A5gTmSXLisNhoCKjohLibM0Q5NmHNutYlNmHPo7MOckNzly94t0WqtNhoCqrY23tjoPagCdlVV/NtvvYXgXIS5iFgtzNXURCUHMLzW13sPX4MIcw6dZZgjyYXRYYe5K1fiZ896D6pQjYPFoKVQhLmIWC3MNTREJQfQ0ZqbvYevQYQ5h84mzJHkQuqww9y9e4l2HJFJeW1tApsUijAXEauFuY6ORA40NXl3uMCM6VxVVfz7772Hr0GEOYfOGsyR5MLrsMMcFEtefCzs5gdaBclhKNUpwlxErBbm4skcqK4u5By4eDExZt+65T1wJSLMOXR2YE5IDiMNHVKHHeagO3cSUYIo9x9dAfjEiYRv3PAetR4B5vy7TRek1cIcdPt2weYA5qv19fG7d72HrEcoef9u0/lxFmCurY0uBBeG7t+Pt7cXoDs6vEeqTf59pgvYyoUcQKb5dzvUxkEpl3+f6Xy6tzBHURRFURRFqRVhjqIoiqIoKsQizFEURVEURYVYhDmKoiiKoqgQizBHURRFURQVYhHmKIqiKIqiQizCHEVRFEVRVIhFmKMoiqIoigqxCHMURVEURVEhFmGOoiiKoigqxCLMURRFURRFhViEOYqiKIqiqBDrX1LhU95Lp6ZBAAAAAElFTkSuQmCC"},344:(A,e,n)=>{n.d(e,{A:()=>s});const s="data:image/png;base64,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"},252:(A,e,n)=>{n.d(e,{A:()=>s});const s=n.p+"assets/images/platform-frontpage-7b857da575a3432831a1aec09d6d1683.png"},8453:(A,e,n)=>{n.d(e,{R:()=>t,x:()=>o});var s=n(6540);const i={},r=s.createContext(i);function t(A){const e=s.useContext(r);return s.useMemo((function(){return"function"==typeof A?A(e):{...e,...A}}),[e,A])}function o(A){let e;return e=A.disableParentContext?"function"==typeof A.components?A.components(i):A.components||i:t(A.components),s.createElement(r.Provider,{value:e},A.children)}}}]); \ No newline at end of file diff --git a/assets/js/bb44c6b0.ae0a9a4d.js b/assets/js/bb44c6b0.ae0a9a4d.js new file mode 100644 index 00000000..e9e68d6e --- /dev/null +++ b/assets/js/bb44c6b0.ae0a9a4d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2346],{1866:(A,e,n)=>{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>t,toc:()=>d});var i=n(4848),s=n(8453);const r={sidebar_position:0,title:"Overview"},o="Lobaro IoT Platform",t={id:"platform/index",title:"Overview",description:"---",source:"@site/docs/platform/index.md",sourceDirName:"platform",slug:"/platform/",permalink:"/iot/platform/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,title:"Overview"},sidebar:"allDocSidebar",previous:{title:"OBIS-Code Configuration",permalink:"/iot/configuration/obis-code-configuration"},next:{title:"Integrations",permalink:"/iot/platform/integrations/"}},l={},d=[{value:"Features",id:"features",level:2},{value:"Overview",id:"overview",level:2}];function a(A){const e={a:"a",code:"code",h1:"h1",h2:"h2",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...A.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.h1,{id:"lobaro-iot-platform",children:"Lobaro IoT Platform"}),"\n",(0,i.jsx)(e.hr,{}),"\n",(0,i.jsxs)(e.p,{children:["The Lobaro IoT Platform operates as a ",(0,i.jsx)(e.strong,{children:"Head End System for IoT Devices"}),". The Platform is optimized for but not limited\nto handle Lobaro devices."]}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["Public Lobaro instance: ",(0,i.jsx)(e.a,{href:"https://platform.lobaro.com/",children:"platform.lobaro.com"})]}),"\n",(0,i.jsxs)(e.li,{children:["For On-Premise hosting check out ",(0,i.jsx)(e.a,{href:"./license",children:"Hosting & Licensing"})]}),"\n"]}),"\n",(0,i.jsx)(e.p,{children:"The documentation will always reference the Public Lobaro instance."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"img.png",src:n(252).A+"",width:"2656",height:"1506"})}),"\n",(0,i.jsx)(e.h2,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsx)(e.li,{children:"Multi tenant (Organisations) with branding / white labeling"}),"\n",(0,i.jsx)(e.li,{children:"IoT Device Management"}),"\n",(0,i.jsx)(e.li,{children:"Support for all Lobaro Devices"}),"\n",(0,i.jsx)(e.li,{children:"Possibility to integrate 3rd party IoT Devices (LoRaWAN, NB-IoT, ...)"}),"\n",(0,i.jsx)(e.li,{children:"Device configuration"}),"\n",(0,i.jsx)(e.li,{children:"Firmware updates"}),"\n",(0,i.jsx)(e.li,{children:"Data parsing and persistence"}),"\n",(0,i.jsxs)(e.li,{children:["Device protocols:","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsx)(e.li,{children:"LoRaWAN Network Server"}),"\n",(0,i.jsx)(e.li,{children:"CoAP"}),"\n",(0,i.jsx)(e.li,{children:"HTTP"}),"\n",(0,i.jsx)(e.li,{children:"Manufacturer specifics"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Connect devices via:","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsx)(e.li,{children:"LoRaWAN"}),"\n",(0,i.jsx)(e.li,{children:"NB-IoT"}),"\n",(0,i.jsx)(e.li,{children:"LTE-M"}),"\n",(0,i.jsx)(e.li,{children:"GSM / LTE"}),"\n",(0,i.jsx)(e.li,{children:"etc."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(e.li,{children:"APIs to access or forward data to Use-Case specific applications"}),"\n",(0,i.jsx)(e.li,{children:"Scaling to handle thousands of devices"}),"\n"]}),"\n",(0,i.jsx)(e.p,{children:"We offer free access to the platform for tests and integrations (up to 12 Month) with the purchase of any Lobaro device\nin our shared instance. In addition we offer private instance hosting or On-Premise (any Server with Root access)."}),"\n",(0,i.jsx)(e.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"img.png",src:n(344).A+"",width:"921",height:"114"})}),"\n",(0,i.jsx)(e.p,{children:"You can find your organisations name next to the Logo. Admins can change their organisation by clicking the small Icon\nnext to it."}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.strong,{children:"Devices:"})," Manage all devices of your organisation."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.strong,{children:"Data:"})," See incoming data of all your devices."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.strong,{children:"Integrations:"})," Manage data connections to and from other applications. (See: ",(0,i.jsx)(e.a,{href:"/iot/platform/integrations/",children:"Integrations"}),")."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.strong,{children:"Organisation:"})," Manage all organisation related data."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.strong,{children:"Configuration:"})," Platform administration of global entities independent of the Organisation (Admins only)."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.strong,{children:"Tools:"})," wMbus Parser and Hardware Activation."]}),"\n"]}),"\n",(0,i.jsx)(e.p,{children:"The platform shows device data received via various data sources like LoRaWAN, NB.IoT, GSM, etc."}),"\n",(0,i.jsxs)(e.p,{children:["The connection to a device in handled by a ",(0,i.jsx)(e.code,{children:"Datasource"}),". Incoming data is mapped to a matching ",(0,i.jsx)(e.code,{children:"Device"}),". Raw data is saved\nas ",(0,i.jsx)(e.code,{children:"Uplink"})," Message. The ",(0,i.jsx)(e.code,{children:"Uplink"})," Message gets processed by a ",(0,i.jsx)(e.code,{children:"Parser"}),". The result of the parser is saved as ",(0,i.jsx)(e.code,{children:"Device Data"})," used\nfor visualization inside the dashboard and in outgoing APIs."]}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"img.png",src:n(5395).A+"",width:"836",height:"82"})})]})}function c(A={}){const{wrapper:e}={...(0,s.R)(),...A.components};return e?(0,i.jsx)(e,{...A,children:(0,i.jsx)(a,{...A})}):a(A)}},5395:(A,e,n)=>{n.d(e,{A:()=>i});const i="data:image/png;base64,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"},344:(A,e,n)=>{n.d(e,{A:()=>i});const i="data:image/png;base64,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"},252:(A,e,n)=>{n.d(e,{A:()=>i});const i=n.p+"assets/images/platform-frontpage-7b857da575a3432831a1aec09d6d1683.png"},8453:(A,e,n)=>{n.d(e,{R:()=>o,x:()=>t});var i=n(6540);const s={},r=i.createContext(s);function o(A){const e=i.useContext(r);return i.useMemo((function(){return"function"==typeof A?A(e):{...e,...A}}),[e,A])}function t(A){let e;return e=A.disableParentContext?"function"==typeof A.components?A.components(s):A.components||s:o(A.components),i.createElement(r.Provider,{value:e},A.children)}}}]); \ No newline at end of file diff --git a/assets/js/bd783ed9.540dc92c.js b/assets/js/bd783ed9.540dc92c.js deleted file mode 100644 index 143e9c89..00000000 --- a/assets/js/bd783ed9.540dc92c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8245],{3313:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var o=t(4848),i=t(8453);const r={sidebar_position:0,displayed_sidebar:"componentsSidebar",title:"Overview"},s="Product Components",c={id:"components/index",title:"Overview",description:"---",source:"@site/docs/components/index.md",sourceDirName:"components",slug:"/components/",permalink:"/iot/components/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,displayed_sidebar:"componentsSidebar",title:"Overview"},sidebar:"componentsSidebar",next:{title:"Firmware Manuals",permalink:"/iot/components/firmware/"}},a={},d=[];function p(e){const n={admonition:"admonition",h1:"h1",hr:"hr",p:"p",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"product-components",children:"Product Components"}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.p,{children:"Lobaro Products are made from components."}),"\n",(0,o.jsx)(n.p,{children:"This section describes the different available firmware implementation. In different products the same firmware is\nshared. This is the reason why we decided to describe the firmware functionality in a general documentation and only\npoint out product specific details in the actual product description."}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"This new documentation center is currently work in progress"})})]})}function m(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>c});var o=t(6540);const i={},r=o.createContext(i);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bd783ed9.d5b09a9c.js b/assets/js/bd783ed9.d5b09a9c.js new file mode 100644 index 00000000..a210d910 --- /dev/null +++ b/assets/js/bd783ed9.d5b09a9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8245],{3313:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var o=t(4848),r=t(8453);const i={sidebar_position:0},s="Product Components",c={id:"components/index",title:"Product Components",description:"---",source:"@site/docs/components/index.md",sourceDirName:"components",slug:"/components/",permalink:"/iot/components/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"allDocSidebar",previous:{title:"Hybrid Gateway",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/"},next:{title:"Firmware Manuals",permalink:"/iot/components/firmware/"}},a={},d=[];function p(e){const n={admonition:"admonition",h1:"h1",hr:"hr",p:"p",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"product-components",children:"Product Components"}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.p,{children:"Lobaro Products are made from components."}),"\n",(0,o.jsx)(n.p,{children:"This section describes the different available firmware implementation. In different products the same firmware is\nshared. This is the reason why we decided to describe the firmware functionality in a general documentation and only\npoint out product specific details in the actual product description."}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"This new documentation center is currently work in progress"})})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>c});var o=t(6540);const r={},i=o.createContext(r);function s(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/be259eb1.4861bf8d.js b/assets/js/be259eb1.4861bf8d.js deleted file mode 100644 index 71787607..00000000 --- a/assets/js/be259eb1.4861bf8d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5990],{3529:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var r=t(4848),n=t(8453);const a={sidebar_position:1},o="Description",i={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc",title:"Description",description:"Getting Started",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Wmbus Gateway V4",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/"},next:{title:"Gateway V3",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"description",children:"Description"}),"\n",(0,r.jsx)(s.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,r.jsxs)(s.p,{children:["Get started by ",(0,r.jsx)(s.strong,{children:"creating a new site"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["Or ",(0,r.jsx)(s.strong,{children:"try Docusaurus immediately"})," with ",(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,r.jsx)(s.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,r.jsxs)(s.p,{children:["Generate a new Docusaurus site using the ",(0,r.jsx)(s.strong,{children:"classic template"}),"."]}),"\n",(0,r.jsx)(s.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,r.jsx)(s.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,r.jsx)(s.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,r.jsx)(s.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,r.jsx)(s.p,{children:"Run the development server:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,r.jsx)(s.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["Open ",(0,r.jsx)(s.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,r.jsx)(s.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>o,x:()=>i});var r=t(6540);const n={},a=r.createContext(n);function o(e){const s=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/be259eb1.765ee0be.js b/assets/js/be259eb1.765ee0be.js new file mode 100644 index 00000000..38bcf88f --- /dev/null +++ b/assets/js/be259eb1.765ee0be.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[5990],{3529:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var r=t(4848),n=t(8453);const a={sidebar_position:1},o="Description",i={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc",title:"Description",description:"Getting Started",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Wmbus Gateway V4",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/"},next:{title:"Gateway V3",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"description",children:"Description"}),"\n",(0,r.jsx)(s.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,r.jsxs)(s.p,{children:["Get started by ",(0,r.jsx)(s.strong,{children:"creating a new site"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["Or ",(0,r.jsx)(s.strong,{children:"try Docusaurus immediately"})," with ",(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,r.jsx)(s.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,r.jsxs)(s.p,{children:["Generate a new Docusaurus site using the ",(0,r.jsx)(s.strong,{children:"classic template"}),"."]}),"\n",(0,r.jsx)(s.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,r.jsx)(s.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,r.jsx)(s.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,r.jsx)(s.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,r.jsx)(s.p,{children:"Run the development server:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,r.jsx)(s.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["Open ",(0,r.jsx)(s.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,r.jsx)(s.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>o,x:()=>i});var r=t(6540);const n={},a=r.createContext(n);function o(e){const s=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c04eaa51.78d94283.js b/assets/js/c04eaa51.78d94283.js new file mode 100644 index 00000000..cb2973e3 --- /dev/null +++ b/assets/js/c04eaa51.78d94283.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2259],{2043:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>d,metadata:()=>a,toc:()=>t});var o=i(4848),s=i(8453);const d={toc_max_heading_level:4},r="Downlinks",a={id:"platform/devices/downlinks",title:"Downlinks",description:"Everybody* read access",source:"@site/docs/platform/devices/downlinks.md",sourceDirName:"platform/devices",slug:"/platform/devices/downlinks",permalink:"/iot/platform/devices/downlinks",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/devices/downlinks.md",tags:[],version:"current",frontMatter:{toc_max_heading_level:4},sidebar:"allDocSidebar",previous:{title:"Devices",permalink:"/iot/platform/devices/"},next:{title:"Hosting & Licensing",permalink:"/iot/platform/license/"}},l={},t=[{value:"Downlink Types",id:"downlink-types",level:2},{value:"Config",id:"config",level:3},{value:"Firmware",id:"firmware",level:3},{value:"Update secure boot and app firmware",id:"update-secure-boot-and-app-firmware",level:4},{value:"Update only app Firmware",id:"update-only-app-firmware",level:4},{value:"Update only secure boot Firmware",id:"update-only-secure-boot-firmware",level:4},{value:"Update modem firmware (detla)",id:"update-modem-firmware-detla",level:4},{value:"Lobaro Device Specific Downlinks",id:"lobaro-device-specific-downlinks",level:3},{value:"Reboot Device",id:"reboot-device",level:4},{value:"Comment / Test",id:"comment--test",level:4},{value:"LoRaWAN Downlinks",id:"lorawan-downlinks",level:3},{value:"Chirpstack specifics",id:"chirpstack-specifics",level:4},{value:"Raw Format",id:"raw-format",level:3},{value:"Tekelek Devices",id:"tekelek-devices",level:4}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"downlinks",children:"Downlinks"}),"\n",(0,o.jsx)(n.admonition,{title:"Required roles",type:"info",children:(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Everybody"})," read access"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"device-admin"})," write access"]}),"\n"]})}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"img.png",src:i(3855).A+"",width:"915",height:"692"})}),"\n",(0,o.jsx)(n.h2,{id:"downlink-types",children:"Downlink Types"}),"\n",(0,o.jsx)(n.p,{children:"There are different downlink Types to be queued. For each type, there can only be one downlink queued at a time.\nWhen queuing a new downlink of the same type, the existing one will be overwritten."}),"\n",(0,o.jsxs)(n.p,{children:["Each downlink need a ",(0,o.jsx)(n.code,{children:"type"})," and ",(0,o.jsx)(n.code,{children:"data"})," field.\nThe ",(0,o.jsx)(n.code,{children:"type"})," field is only used in the platform and not communicated with the device."]}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.strong,{children:"JSON Format"})," in the examples might be subject to ",(0,o.jsx)(n.strong,{children:"change in future"})," and might ",(0,o.jsx)(n.strong,{children:"differ between devices"}),"."]})}),"\n",(0,o.jsx)(n.h3,{id:"config",children:"Config"}),"\n",(0,o.jsx)(n.p,{children:'Update config values of the device. Lobaro Devices will verify the new configuration (including a backend connection).\nIf the config is invalid it will be rolled back to the previous state and a "Config Error" will be reported.'}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"config"})]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Example Data:"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": {\n "mFilter": "LOB",\n "listenCron": "0 0/20 * * * *",\n "cmodeDurSec": "600"\n },\n "q": "config"\n}\n'})}),"\n",(0,o.jsx)(n.h3,{id:"firmware",children:"Firmware"}),"\n",(0,o.jsx)(n.p,{children:"The application + secure boot firmware files to be downloaded by the device."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"app"}),": Application firmware file (",(0,o.jsx)(n.code,{children:"device.app"}),")"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"boot"}),": Associated matching secure boot firmware file (",(0,o.jsx)(n.code,{children:"device.boot"}),")"]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"The firmware for remote updates is different from the one used via the USB adapter!"})}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"fw"})]}),"\n",(0,o.jsx)(n.h4,{id:"update-secure-boot-and-app-firmware",children:"Update secure boot and app firmware"}),"\n",(0,o.jsx)(n.p,{children:"Example Data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": {\n "app": "app-firmware-1.x.x-mcuboot-slot1.hex",\n "boot": "app-boot-nrf9160-sec-TZ2-1.8.2-mcuboot-slot1.hex"\n },\n "q": "fw"\n}\n'})}),"\n",(0,o.jsx)(n.h4,{id:"update-only-app-firmware",children:"Update only app Firmware"}),"\n",(0,o.jsx)(n.p,{children:"Example Data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": {\n "app": "app-firmware-1.x.x-mcuboot-slot1.hex"\n },\n "q": "fw"\n}\n'})}),"\n",(0,o.jsxs)(n.admonition,{type:"tip",children:[(0,o.jsx)(n.p,{children:"Updating only the app firmware is the faster (since less data has to be downloaded by the device)."}),(0,o.jsxs)(n.p,{children:["The appropriate boot firmware version for a particular application firmware can be obtained from Lobaro.\nThe currently installed boot firmware can be read from the device properties (",(0,o.jsx)(n.code,{children:"device.boot"}),") in the Lobaro platform."]}),(0,o.jsx)(n.p,{children:"If in doubt use the command above that updates both firmware images."})]}),"\n",(0,o.jsx)(n.h4,{id:"update-only-secure-boot-firmware",children:"Update only secure boot Firmware"}),"\n",(0,o.jsx)(n.p,{children:"Example Data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": {\n "boot": "app-boot-nrf9160-sec-TZ2-1.8.2-mcuboot-slot1.hex"\n },\n "q": "fw"\n}\n'})}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"If in doubt use the command above that updates both firmware images."})}),"\n",(0,o.jsx)(n.h4,{id:"update-modem-firmware-detla",children:"Update modem firmware (detla)"}),"\n",(0,o.jsx)(n.p,{children:"Delta modem firmware updates can only be performed in patch version steps. Please consult Lobaro for available options."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"mfw"}),': Associated matching delta modem firmware file provided by Nordic Semiconductor ("device.modem")']}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"Only newer Lobaro firmware support this type of update, e.g. app-nrf9160-wmbus+0.24.0 onwards."})}),"\n",(0,o.jsx)(n.p,{children:"Example Data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": {\n "mfw": "mfw_nrf9160_update_from_1.3.2_to_1.3.4.bin"\n },\n "q": "fw"\n}\n'})}),"\n",(0,o.jsx)(n.h3,{id:"lobaro-device-specific-downlinks",children:"Lobaro Device Specific Downlinks"}),"\n",(0,o.jsx)(n.h4,{id:"reboot-device",children:"Reboot Device"}),"\n",(0,o.jsx)(n.p,{children:"Device will reboot when receiving this command."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"fw"})]}),"\n",(0,o.jsx)(n.p,{children:"Example data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "q": "reboot"\n}\n'})}),"\n",(0,o.jsx)(n.h4,{id:"comment--test",children:"Comment / Test"}),"\n",(0,o.jsx)(n.p,{children:"ASCII String that will be printed to device's Log when receiving this command."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"fw"})]}),"\n",(0,o.jsx)(n.p,{children:"Example data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": "ASCII string to print to log",\n "q": "comment"\n}\n'})}),"\n",(0,o.jsx)(n.h3,{id:"lorawan-downlinks",children:"LoRaWAN Downlinks"}),"\n",(0,o.jsx)(n.p,{children:"Send a lorawan downlink over the platform."}),"\n",(0,o.jsxs)(n.admonition,{type:"note",children:[(0,o.jsxs)(n.p,{children:["The integration with the LoRaWAN Network Server is required to send downlinks to the device. Integrations \u2192 LoRaWan, See also: ",(0,o.jsx)(n.a,{href:"/iot/platform/integrations/",children:"Integrations"})]}),(0,o.jsx)(n.p,{children:"At the moment only Chirpstack is supported for Downlinks."})]}),"\n",(0,o.jsxs)(n.p,{children:["To send a downlinks via LoRaWAN a json object with the fields ",(0,o.jsx)(n.code,{children:"type"}),", ",(0,o.jsx)(n.code,{children:"data"})," and ",(0,o.jsx)(n.code,{children:"fPort"})," must be queued."]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"data"}),": The data to be sent to the device"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"type"}),": Specifies the encoding of the data field. Valid options are:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"ascii"}),": The data field is a string that will be ascii encoded"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"hex"}),": The data field is a hex encoded string (e.g. ",(0,o.jsx)(n.code,{children:"0x01FF"}),")"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"base64"}),": The data field is a base64 encoded string (e.g. ",(0,o.jsx)(n.code,{children:"AQ=="}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"fPort"}),": The LoRaWAN frame port to be used for the downlink. See device documentation for valid values."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"lorawan"})]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "data": "scmodeDurSec=15",\n "type": "ascii",\n "fPort": 128\n}\n'})}),"\n",(0,o.jsx)(n.h4,{id:"chirpstack-specifics",children:"Chirpstack specifics"}),"\n",(0,o.jsx)(n.p,{children:"When you create a downlink it will be qued at the platform but only one downlink will be put into the downlink que of the chirpstack server at any time."}),"\n",(0,o.jsx)(n.p,{children:"It's not possible to always know if a downlink was send by the Chirpstack server.\nWhen a Device reconnects to the Chirpstack server with a new Join request Chirpstack drops the downlink queue for this device.\nThis and other cases will lead to situations where we can't say if a downlink was actually send by Chirpstack or not."}),"\n",(0,o.jsxs)(n.p,{children:["For more information observe the information in the downlink tab of your platform for the device or use the ",(0,o.jsx)(n.code,{children:"api/devices/{devId}/downlink"})," API Endpoint."]}),"\n",(0,o.jsx)(n.p,{children:"Always keep in mind that even a successfully send downlink can get lost due to the nature of LoRaWAN"}),"\n",(0,o.jsx)(n.h3,{id:"raw-format",children:"Raw Format"}),"\n",(0,o.jsxs)(n.p,{children:["Downlinks of type ",(0,o.jsx)(n.code,{children:"config"})," and ",(0,o.jsx)(n.code,{children:"fw"})," are always encoded in CBOR for Lobaro Devices.\nIt is also possible to send arbitrary data to other device."]}),"\n",(0,o.jsx)(n.p,{children:"Supported 3rd Party Devices:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Tektelek Devices support ",(0,o.jsx)(n.code,{children:"ASCII"})," downlinks"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"raw"})]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Fields:"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"format"}),": Encoding of the data field. Valid options are:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"ascii"}),": The data field is a string that will be ascii encoded"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"cbor"}),": The data field is a json object that will be cbor encoded"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"data"}),": The data to be sent to the device"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["This can also be used to mimic the ",(0,o.jsx)(n.code,{children:"config"})," and ",(0,o.jsx)(n.code,{children:"fw"})," downlink types."]}),"\n",(0,o.jsx)(n.p,{children:"Mimic Config Change:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "format": "cbor",\n "data": {\n "d": {\n "cmodeDurSec": 123\n },\n "q": "config"\n }\n}\n'})}),"\n",(0,o.jsx)(n.p,{children:"Mimic Reboot:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "format": "cbor",\n "data": {\n "q": "reboot"\n }\n}\n'})}),"\n",(0,o.jsx)(n.h4,{id:"tekelek-devices",children:"Tekelek Devices"}),"\n",(0,o.jsx)(n.p,{children:"Scheduling TCP/IP downlinks for Tekelek devices."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"raw"})]}),"\n",(0,o.jsx)(n.p,{children:"Example Data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "format": "ASCII",\n "data": "ascii-downlink-payload"\n}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},3855:(e,n,i)=>{i.d(n,{A:()=>o});const o=i.p+"assets/images/nav-downlinks-1aeaa3acca0eed3775caff1559db4237.png"},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>a});var o=i(6540);const s={},d=o.createContext(s);function r(e){const n=o.useContext(d);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c04eaa51.df03fb11.js b/assets/js/c04eaa51.df03fb11.js deleted file mode 100644 index 533809d4..00000000 --- a/assets/js/c04eaa51.df03fb11.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[2259],{2043:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>d,metadata:()=>a,toc:()=>t});var o=i(4848),s=i(8453);const d={toc_max_heading_level:4},r="Downlinks",a={id:"platform/devices/downlinks",title:"Downlinks",description:"Everybody* read access",source:"@site/docs/platform/devices/downlinks.md",sourceDirName:"platform/devices",slug:"/platform/devices/downlinks",permalink:"/iot/platform/devices/downlinks",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/devices/downlinks.md",tags:[],version:"current",frontMatter:{toc_max_heading_level:4},sidebar:"cloudSidebar",previous:{title:"Devices",permalink:"/iot/platform/devices/"},next:{title:"Hosting & Licensing",permalink:"/iot/platform/license/"}},l={},t=[{value:"Downlink Types",id:"downlink-types",level:2},{value:"Config",id:"config",level:3},{value:"Firmware",id:"firmware",level:3},{value:"Update secure boot and app firmware",id:"update-secure-boot-and-app-firmware",level:4},{value:"Update only app Firmware",id:"update-only-app-firmware",level:4},{value:"Update only secure boot Firmware",id:"update-only-secure-boot-firmware",level:4},{value:"Update modem firmware (detla)",id:"update-modem-firmware-detla",level:4},{value:"Lobaro Device Specific Downlinks",id:"lobaro-device-specific-downlinks",level:3},{value:"Reboot Device",id:"reboot-device",level:4},{value:"Comment / Test",id:"comment--test",level:4},{value:"LoRaWAN Downlinks",id:"lorawan-downlinks",level:3},{value:"Chirpstack specifics",id:"chirpstack-specifics",level:4},{value:"Raw Format",id:"raw-format",level:3},{value:"Tekelek Devices",id:"tekelek-devices",level:4}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"downlinks",children:"Downlinks"}),"\n",(0,o.jsx)(n.admonition,{title:"Required roles",type:"info",children:(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Everybody"})," read access"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"device-admin"})," write access"]}),"\n"]})}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"img.png",src:i(3855).A+"",width:"915",height:"692"})}),"\n",(0,o.jsx)(n.h2,{id:"downlink-types",children:"Downlink Types"}),"\n",(0,o.jsx)(n.p,{children:"There are different downlink Types to be queued. For each type, there can only be one downlink queued at a time.\nWhen queuing a new downlink of the same type, the existing one will be overwritten."}),"\n",(0,o.jsxs)(n.p,{children:["Each downlink need a ",(0,o.jsx)(n.code,{children:"type"})," and ",(0,o.jsx)(n.code,{children:"data"})," field.\nThe ",(0,o.jsx)(n.code,{children:"type"})," field is only used in the platform and not communicated with the device."]}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.strong,{children:"JSON Format"})," in the examples might be subject to ",(0,o.jsx)(n.strong,{children:"change in future"})," and might ",(0,o.jsx)(n.strong,{children:"differ between devices"}),"."]})}),"\n",(0,o.jsx)(n.h3,{id:"config",children:"Config"}),"\n",(0,o.jsx)(n.p,{children:'Update config values of the device. Lobaro Devices will verify the new configuration (including a backend connection).\nIf the config is invalid it will be rolled back to the previous state and a "Config Error" will be reported.'}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"config"})]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Example Data:"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": {\n "mFilter": "LOB",\n "listenCron": "0 0/20 * * * *",\n "cmodeDurSec": "600"\n },\n "q": "config"\n}\n'})}),"\n",(0,o.jsx)(n.h3,{id:"firmware",children:"Firmware"}),"\n",(0,o.jsx)(n.p,{children:"The application + secure boot firmware files to be downloaded by the device."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"app"}),": Application firmware file (",(0,o.jsx)(n.code,{children:"device.app"}),")"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"boot"}),": Associated matching secure boot firmware file (",(0,o.jsx)(n.code,{children:"device.boot"}),")"]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"The firmware for remote updates is different from the one used via the USB adapter!"})}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"fw"})]}),"\n",(0,o.jsx)(n.h4,{id:"update-secure-boot-and-app-firmware",children:"Update secure boot and app firmware"}),"\n",(0,o.jsx)(n.p,{children:"Example Data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": {\n "app": "app-firmware-1.x.x-mcuboot-slot1.hex",\n "boot": "app-boot-nrf9160-sec-TZ2-1.8.2-mcuboot-slot1.hex"\n },\n "q": "fw"\n}\n'})}),"\n",(0,o.jsx)(n.h4,{id:"update-only-app-firmware",children:"Update only app Firmware"}),"\n",(0,o.jsx)(n.p,{children:"Example Data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": {\n "app": "app-firmware-1.x.x-mcuboot-slot1.hex"\n },\n "q": "fw"\n}\n'})}),"\n",(0,o.jsxs)(n.admonition,{type:"tip",children:[(0,o.jsx)(n.p,{children:"Updating only the app firmware is the faster (since less data has to be downloaded by the device)."}),(0,o.jsxs)(n.p,{children:["The appropriate boot firmware version for a particular application firmware can be obtained from Lobaro.\nThe currently installed boot firmware can be read from the device properties (",(0,o.jsx)(n.code,{children:"device.boot"}),") in the Lobaro platform."]}),(0,o.jsx)(n.p,{children:"If in doubt use the command above that updates both firmware images."})]}),"\n",(0,o.jsx)(n.h4,{id:"update-only-secure-boot-firmware",children:"Update only secure boot Firmware"}),"\n",(0,o.jsx)(n.p,{children:"Example Data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": {\n "boot": "app-boot-nrf9160-sec-TZ2-1.8.2-mcuboot-slot1.hex"\n },\n "q": "fw"\n}\n'})}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"If in doubt use the command above that updates both firmware images."})}),"\n",(0,o.jsx)(n.h4,{id:"update-modem-firmware-detla",children:"Update modem firmware (detla)"}),"\n",(0,o.jsx)(n.p,{children:"Delta modem firmware updates can only be performed in patch version steps. Please consult Lobaro for available options."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"mfw"}),': Associated matching delta modem firmware file provided by Nordic Semiconductor ("device.modem")']}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"Only newer Lobaro firmware support this type of update, e.g. app-nrf9160-wmbus+0.24.0 onwards."})}),"\n",(0,o.jsx)(n.p,{children:"Example Data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": {\n "mfw": "mfw_nrf9160_update_from_1.3.2_to_1.3.4.bin"\n },\n "q": "fw"\n}\n'})}),"\n",(0,o.jsx)(n.h3,{id:"lobaro-device-specific-downlinks",children:"Lobaro Device Specific Downlinks"}),"\n",(0,o.jsx)(n.h4,{id:"reboot-device",children:"Reboot Device"}),"\n",(0,o.jsx)(n.p,{children:"Device will reboot when receiving this command."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"fw"})]}),"\n",(0,o.jsx)(n.p,{children:"Example data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "q": "reboot"\n}\n'})}),"\n",(0,o.jsx)(n.h4,{id:"comment--test",children:"Comment / Test"}),"\n",(0,o.jsx)(n.p,{children:"ASCII String that will be printed to device's Log when receiving this command."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"fw"})]}),"\n",(0,o.jsx)(n.p,{children:"Example data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "d": "ASCII string to print to log",\n "q": "comment"\n}\n'})}),"\n",(0,o.jsx)(n.h3,{id:"lorawan-downlinks",children:"LoRaWAN Downlinks"}),"\n",(0,o.jsx)(n.p,{children:"Send a lorawan downlink over the platform."}),"\n",(0,o.jsxs)(n.admonition,{type:"note",children:[(0,o.jsxs)(n.p,{children:["The integration with the LoRaWAN Network Server is required to send downlinks to the device. Integrations \u2192 LoRaWan, See also: ",(0,o.jsx)(n.a,{href:"/iot/platform/integrations/",children:"Integrations"})]}),(0,o.jsx)(n.p,{children:"At the moment only Chirpstack is supported for Downlinks."})]}),"\n",(0,o.jsxs)(n.p,{children:["To send a downlinks via LoRaWAN a json object with the fields ",(0,o.jsx)(n.code,{children:"type"}),", ",(0,o.jsx)(n.code,{children:"data"})," and ",(0,o.jsx)(n.code,{children:"fPort"})," must be queued."]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"data"}),": The data to be sent to the device"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"type"}),": Specifies the encoding of the data field. Valid options are:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"ascii"}),": The data field is a string that will be ascii encoded"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"hex"}),": The data field is a hex encoded string (e.g. ",(0,o.jsx)(n.code,{children:"0x01FF"}),")"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"base64"}),": The data field is a base64 encoded string (e.g. ",(0,o.jsx)(n.code,{children:"AQ=="}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"fPort"}),": The LoRaWAN frame port to be used for the downlink. See device documentation for valid values."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"lorawan"})]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "data": "scmodeDurSec=15",\n "type": "ascii",\n "fPort": 128\n}\n'})}),"\n",(0,o.jsx)(n.h4,{id:"chirpstack-specifics",children:"Chirpstack specifics"}),"\n",(0,o.jsx)(n.p,{children:"When you create a downlink it will be qued at the platform but only one downlink will be put into the downlink que of the chirpstack server at any time."}),"\n",(0,o.jsx)(n.p,{children:"It's not possible to always know if a downlink was send by the Chirpstack server.\nWhen a Device reconnects to the Chirpstack server with a new Join request Chirpstack drops the downlink queue for this device.\nThis and other cases will lead to situations where we can't say if a downlink was actually send by Chirpstack or not."}),"\n",(0,o.jsxs)(n.p,{children:["For more information observe the information in the downlink tab of your platform for the device or use the ",(0,o.jsx)(n.code,{children:"api/devices/{devId}/downlink"})," API Endpoint."]}),"\n",(0,o.jsx)(n.p,{children:"Always keep in mind that even a successfully send downlink can get lost due to the nature of LoRaWAN"}),"\n",(0,o.jsx)(n.h3,{id:"raw-format",children:"Raw Format"}),"\n",(0,o.jsxs)(n.p,{children:["Downlinks of type ",(0,o.jsx)(n.code,{children:"config"})," and ",(0,o.jsx)(n.code,{children:"fw"})," are always encoded in CBOR for Lobaro Devices.\nIt is also possible to send arbitrary data to other device."]}),"\n",(0,o.jsx)(n.p,{children:"Supported 3rd Party Devices:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Tektelek Devices support ",(0,o.jsx)(n.code,{children:"ASCII"})," downlinks"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"raw"})]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Fields:"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"format"}),": Encoding of the data field. Valid options are:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"ascii"}),": The data field is a string that will be ascii encoded"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"cbor"}),": The data field is a json object that will be cbor encoded"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"data"}),": The data to be sent to the device"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["This can also be used to mimic the ",(0,o.jsx)(n.code,{children:"config"})," and ",(0,o.jsx)(n.code,{children:"fw"})," downlink types."]}),"\n",(0,o.jsx)(n.p,{children:"Mimic Config Change:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "format": "cbor",\n "data": {\n "d": {\n "cmodeDurSec": 123\n },\n "q": "config"\n }\n}\n'})}),"\n",(0,o.jsx)(n.p,{children:"Mimic Reboot:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "format": "cbor",\n "data": {\n "q": "reboot"\n }\n}\n'})}),"\n",(0,o.jsx)(n.h4,{id:"tekelek-devices",children:"Tekelek Devices"}),"\n",(0,o.jsx)(n.p,{children:"Scheduling TCP/IP downlinks for Tekelek devices."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Type:"})," ",(0,o.jsx)(n.code,{children:"raw"})]}),"\n",(0,o.jsx)(n.p,{children:"Example Data:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "format": "ASCII",\n "data": "ascii-downlink-payload"\n}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},3855:(e,n,i)=>{i.d(n,{A:()=>o});const o=i.p+"assets/images/nav-downlinks-1aeaa3acca0eed3775caff1559db4237.png"},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>a});var o=i(6540);const s={},d=o.createContext(s);function r(e){const n=o.useContext(d);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c248f023.a9c34bee.js b/assets/js/c248f023.a9c34bee.js new file mode 100644 index 00000000..a3dc3baa --- /dev/null +++ b/assets/js/c248f023.a9c34bee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7315],{6185:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var s=t(4848),r=t(8453);const i={sidebar_position:0},o="Overview",d={id:"products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index",title:"Overview",description:"Some notable things in a block quote!",source:"@site/docs/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index.md",sourceDirName:"products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1",slug:"/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"allDocSidebar",previous:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow"},next:{title:"Product Components",permalink:"/iot/components/"}},a={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)("div",{className:"note",children:(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Some notable things in a block quote!"}),"\n"]})}),"\n",(0,s.jsx)("div",{children:(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:"Person 1"}),(0,s.jsx)("th",{children:"Person 2"}),(0,s.jsx)("th",{children:"Person 3"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"Emil"}),(0,s.jsx)("td",{children:"Tobias"}),(0,s.jsx)("td",{children:"Linus"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"16"}),(0,s.jsx)("td",{children:"14"}),(0,s.jsx)("td",{children:"10"})]})]})}),"\n",(0,s.jsx)(n.h1,{id:"tutorial-intro",children:"Tutorial Intro"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Foo"}),(0,s.jsx)(n.th,{children:"Bar"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"A"}),(0,s.jsx)(n.td,{children:"B"})]})})]}),"\n",(0,s.jsxs)(n.p,{children:["Let's discover ",(0,s.jsx)(n.strong,{children:"Docusaurus in less than 5 minutes"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,s.jsxs)(n.p,{children:["Get started by ",(0,s.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Or ",(0,s.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,s.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,s.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,s.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,s.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,s.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,s.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Open ",(0,s.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,s.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>d});var s=t(6540);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c248f023.d9d96a10.js b/assets/js/c248f023.d9d96a10.js deleted file mode 100644 index 40bad504..00000000 --- a/assets/js/c248f023.d9d96a10.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7315],{6185:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var t=s(4848),r=s(8453);const i={sidebar_position:0},d="Overview",o={id:"products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index",title:"Overview",description:"Some notable things in a block quote!",source:"@site/docs/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index.md",sourceDirName:"products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1",slug:"/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"productsSidebar",previous:{title:"Workflow",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow"}},a={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)("div",{className:"note",children:(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsx)(n.p,{children:"Some notable things in a block quote!"}),"\n"]})}),"\n",(0,t.jsx)("div",{children:(0,t.jsxs)("table",{children:[(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Person 1"}),(0,t.jsx)("th",{children:"Person 2"}),(0,t.jsx)("th",{children:"Person 3"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:"Emil"}),(0,t.jsx)("td",{children:"Tobias"}),(0,t.jsx)("td",{children:"Linus"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:"16"}),(0,t.jsx)("td",{children:"14"}),(0,t.jsx)("td",{children:"10"})]})]})}),"\n",(0,t.jsx)(n.h1,{id:"tutorial-intro",children:"Tutorial Intro"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Foo"}),(0,t.jsx)(n.th,{children:"Bar"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"A"}),(0,t.jsx)(n.td,{children:"B"})]})})]}),"\n",(0,t.jsxs)(n.p,{children:["Let's discover ",(0,t.jsx)(n.strong,{children:"Docusaurus in less than 5 minutes"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(n.p,{children:["Get started by ",(0,t.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Or ",(0,t.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>d,x:()=>o});var t=s(6540);const r={},i=t.createContext(r);function d(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c3c3fdd3.2d390918.js b/assets/js/c3c3fdd3.2d390918.js new file mode 100644 index 00000000..fb5c5f44 --- /dev/null +++ b/assets/js/c3c3fdd3.2d390918.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8622],{9564:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/images/ideal-img/Hybrid-Connectivity-highRes.a71ede1.1108.png 1108w",images:[{path:n.p+"assets/images/ideal-img/Hybrid-Connectivity-highRes.a71ede1.1108.png",width:1108,height:316}],src:n.p+"assets/images/ideal-img/Hybrid-Connectivity-highRes.a71ede1.1108.png",toString:function(){return n.p+"assets/images/ideal-img/Hybrid-Connectivity-highRes.a71ede1.1108.png"},placeholder:void 0,width:1108,height:316},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAdUlEQVR4nDXDuwrCMABA0fz/h4gEHBTsKFUQBKsRN62IivRBk9QYstg2Vxw8cEThLKVpGEnJcjYl7HdY71HnK/n9ydFFcvdBSLVinKUkhw2n2wX8m0dRMVmsSbeKedmR2Q7RDwN9jGhjqOqaRmv0b/sihMDfF5ftbOzIpZURAAAAAElFTkSuQmCC"}},2587:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>a,frontMatter:()=>r,metadata:()=>s,toc:()=>o});var i=n(4848),l=n(8453);const r={sidebar_position:1,title:"Configuration Parameter"},d="Configuration",s={id:"components/firmware/app-nrf9160-wmbus/configuration-parameter",title:"Configuration Parameter",description:"On this page all common configuration parameters of the firmware are presented. Usually the internal defaults work",source:"@site/docs/components/firmware/app-nrf9160-wmbus/configuration-parameter.md",sourceDirName:"components/firmware/app-nrf9160-wmbus",slug:"/components/firmware/app-nrf9160-wmbus/configuration-parameter",permalink:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-nrf9160-wmbus/configuration-parameter.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"Configuration Parameter"},sidebar:"allDocSidebar",previous:{title:"Introduction",permalink:"/iot/components/firmware/app-nrf9160-wmbus/introduction"},next:{title:"LoRaWAN Communication",permalink:"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol"}},c={},o=[{value:"Firmware Configuration Parameter",id:"firmware-configuration-parameter",level:2},{value:"General",id:"general",level:3},{value:"WAN",id:"wan",level:4},{value:"Limitations in LoRaWAN vs. NB-IoT / LTE-M",id:"limitations-in-lorawan-vs-nb-iot--lte-m",level:4},{value:"Meter Scanning",id:"meter-scanning",level:3},{value:"listenCron",id:"listencron",level:4},{value:"cmodeDurSec smodeDurSec xmodeDurSec umodeDurSec",id:"durations",level:4},{value:"devFilter ciFilter mFilter typFilter",id:"filter",level:4},{value:"maxTelegrams",id:"maxtelegrams",level:4},{value:"LTE Connection",id:"lteconnection",level:3},{value:"Host",id:"platformhost",level:4},{value:"APN Operator Band",id:"lteparam",level:4},{value:"UseNbiot UseLtem",id:"ltenet",level:4},{value:"UdpHost UdpPort",id:"plainUdp",level:4},{value:"LoRaWAN Connection",id:"lorawanparams",level:3},{value:"PayloadFormat",id:"payloadformat",level:4},{value:"Special",id:"special",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components},{Image:r}=t;return r||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(t.p,{children:"On this page all common configuration parameters of the firmware are presented. Usually the internal defaults work\nquite well to get the device up and running."}),"\n",(0,i.jsx)(t.admonition,{title:"Customer specific configuration",type:"note",children:(0,i.jsx)(t.p,{children:"For larger orders Lobaro can apply a custom customer specific configuration for all parameter before\ndelivery."})}),"\n",(0,i.jsx)(t.h2,{id:"firmware-configuration-parameter",children:"Firmware Configuration Parameter"}),"\n",(0,i.jsx)(t.admonition,{title:"Product specific parameters possible",type:"info",children:(0,i.jsx)(t.p,{children:"The described configuration parameters are common for all products running this firmware. Nevertheless some products may\nadd additional parameters or alter the here described parameters, e.g. some allow additional values to be set. In any\ncase the documentation of the specific product takes precedence over this general description and should\nalso be read with care."})}),"\n",(0,i.jsx)(t.h3,{id:"general",children:"General"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Key"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Possible Values"}),(0,i.jsx)(t.th,{style:{textAlign:"center"},children:"Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE / LoRaWAN Selection"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#wan",children:(0,i.jsx)(t.code,{children:"WAN"})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"lte"})," or ",(0,i.jsx)(t.code,{children:"lorawan"})]}),(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.code,{children:"lte"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Days Without Connectivity Until Device Reset"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"LostReboot "})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Any, e.g. ",(0,i.jsx)(t.code,{children:"3"})]}),(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.code,{children:"5"})})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"wan",children:(0,i.jsx)(t.code,{children:"WAN"})}),"\n",(0,i.jsx)(t.p,{children:"LPWAN technology used for connection and data communication with the backend server. This can be either cellular LTE (\nNB-IoT, LTE-M) or LoRaWAN."}),"\n",(0,i.jsx)(r,{alt:"Lobaro Hybrid Connectivity LoRaWAN, NB-IoT, LTE-M",img:n(9564),style:{width:"40%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"lte"}),": use either cellular NB-IoT or LTE-M"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"lorawan"}),": use LoRaWAN with OTAA (over the air activation)"]}),"\n"]}),"\n",(0,i.jsx)(t.h4,{id:"limitations-in-lorawan-vs-nb-iot--lte-m",children:"Limitations in LoRaWAN vs. NB-IoT / LTE-M"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["LoRaWAN Uplinks and Downlinks are limited to 52-222 Bytes depending on the Spreading Factor (Connection Quality).","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Uplink with (longer) wMBUS Telegrams might be split over multiple LoRaWAN Messages."}),"\n",(0,i.jsx)(t.li,{children:"Uplinks of many wMBUS telegrams might take a long period of time due to duty-cycle limitations of LoRaWAN."}),"\n",(0,i.jsx)(t.li,{children:"Downlinks with big configuration values (e.g. long whitelist) must be split over multiple Downlinks which might be\ndifficult to implement."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Limited amount of meta-data:","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Less information in status telegram, due to reduced uplink channel capacity."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"meter-scanning",children:"Meter Scanning"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Key"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Possible Values"}),(0,i.jsxs)(t.th,{children:["Default",(0,i.jsx)("div",{style:{width:"120px"}})]})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS Listen Cron [UTC+0]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#listencron",children:(0,i.jsx)(t.code,{children:"listenCron "})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["Any ",(0,i.jsx)(t.a,{href:"/iot/configuration/cron-configuration",children:"CRON"})," String"]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0 0 12 * * *"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS C1/T1 Listen Duration [s]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#durations",children:(0,i.jsx)(t.code,{children:"cmodeDurSec "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Number of seconds",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"0"})," = Do not collect C1/T1",(0,i.jsx)("br",{}),"Max Value=",(0,i.jsx)(t.code,{children:"36000"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"300"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS S1 Listen Duration [s]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#durations",children:(0,i.jsx)(t.code,{children:"smodeDurSec "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Number of seconds",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"0"})," = Do not collect S1",(0,i.jsx)("br",{}),"Max Value=",(0,i.jsx)(t.code,{children:"36000"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Sensus RF Listen Duration [s]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#durations",children:(0,i.jsx)(t.code,{children:"xmodeDurSec "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Number of seconds",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"0"})," = Do not collect X-Mode",(0,i.jsx)("br",{}),"Max Value=",(0,i.jsx)(t.code,{children:"36000"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"M\xfcller-Funk Listen Duration [s]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#durations",children:(0,i.jsx)(t.code,{children:"umodeDurSec "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Number of seconds",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"0"})," = Do not collect U-Mode",(0,i.jsx)("br",{}),"Max Value=",(0,i.jsx)(t.code,{children:"36000"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS ID Filter List"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#filter",children:(0,i.jsx)(t.code,{children:"devFilter"})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["List, e.g.",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"88009035,13456035"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS Type Filter List"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#filter",children:(0,i.jsx)(t.code,{children:"typFilter "})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["List, e.g.",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"08,07"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS M-Field Filter List"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#filter",children:(0,i.jsx)(t.code,{children:"mFilter "})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["List, e.g.",(0,i.jsx)("br",{})," ",(0,i.jsx)(t.code,{children:"DME,ITW,SEN,QDS"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS CI-Field Filter List"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#filter",children:(0,i.jsx)(t.code,{children:"ciFilter"})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["List, e.g.",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"8a,72"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS Telegram Upload Limit"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#maxtelegrams",children:(0,i.jsx)(t.code,{children:"maxTelegrams"})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Any number of max. Telegrams",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"0"})," = no limit."]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0"})})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"listencron",children:(0,i.jsx)(t.code,{children:"listenCron"})}),"\n",(0,i.jsx)(t.p,{children:"The listen cron defines when the device wakes up to receive the enabled wireless M-BUS and other radio protocols. Each\nlisten period is followed by uploading the data over the configured WAN technology. A reasonable interval strongly\ndepends on the\nproducts power supply (battery vs. external powered) and the application demand of new metering data. Typical values\nrange from every 15 minutes to 14\ndays between consecutive readouts."}),"\n",(0,i.jsx)(t.admonition,{title:"in depth description",type:"tip",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/iot/configuration/cron-configuration",children:"Read more"})," about CRON parameterization."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.h4,{id:"durations",children:[(0,i.jsx)(t.code,{children:"cmodeDurSec"})," ",(0,i.jsx)(t.code,{children:"smodeDurSec"})," ",(0,i.jsx)(t.code,{children:"xmodeDurSec"})," ",(0,i.jsx)(t.code,{children:"umodeDurSec"})]}),"\n",(0,i.jsxs)(t.p,{children:["Duration in seconds, e.g. ",(0,i.jsx)(t.code,{children:"300"})," (5 minutes), to collect metering data in corresponding wireless protocol. All listening\nperiods are executed one after the other for the duration defined. Afterwards all collected meter telegrams will be\ntransmitted using the configured ",(0,i.jsx)(t.code,{children:"WAN"})," technology."]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.h4,{id:"filter",children:[(0,i.jsx)(t.code,{children:"devFilter"})," ",(0,i.jsx)(t.code,{children:"ciFilter"})," ",(0,i.jsx)(t.code,{children:"mFilter"})," ",(0,i.jsx)(t.code,{children:"typFilter"})]}),"\n",(0,i.jsx)(t.p,{children:"Filter meters to be be collected and uploaded by wireless M-BUS related fields."}),"\n",(0,i.jsx)(t.admonition,{title:"in depth description",type:"tip",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/iot/configuration/meter-reception-filter-config",children:"Read more"})," about telegram filter parameterization."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h4,{id:"maxtelegrams",children:(0,i.jsx)(t.code,{children:"maxTelegrams"})}),"\n",(0,i.jsx)(t.p,{children:"Set hard limit on how many telegrams will be collected and uploaded. The firmware will stop collection, once this number\nhas been collected, regardless of the passed time. Can be used save battery / data volume, should the device be in an\narea with a large number of meters."}),"\n",(0,i.jsx)(t.h3,{id:"lteconnection",children:"LTE Connection"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Key"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Possible Values"}),(0,i.jsx)(t.th,{children:"Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE Lobaro Platform Host"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#platformhost",children:(0,i.jsx)(t.code,{children:"Host "})})}),(0,i.jsx)(t.td,{children:"IP / URL"}),(0,i.jsx)(t.td,{children:"List of various Endpoints"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"coaps://platform.lobaro.com"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE MCC+MNC Code"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#lteparam",children:(0,i.jsx)(t.code,{children:"Operator "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["e.g. ",(0,i.jsx)(t.code,{children:"26201"})," (Dt. Telekom)"]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE Band"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#lteparam",children:(0,i.jsx)(t.code,{children:"Band "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"3"})," or ",(0,i.jsx)(t.code,{children:"8,20"})," or ",(0,i.jsx)(t.code,{children:"3,8,20"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"3,8,20"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE APN"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#lteparam",children:(0,i.jsx)(t.code,{children:"APN "})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsx)(t.td,{children:"any APN"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"*"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE NB-IoT on/off"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#ltenet",children:(0,i.jsx)(t.code,{children:"UseNbiot "})})}),(0,i.jsx)(t.td,{children:"Bool"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"true"})," or ",(0,i.jsx)(t.code,{children:"false"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"true"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE M1 on/off"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#ltenet",children:(0,i.jsx)(t.code,{children:"UseLtem "})})}),(0,i.jsx)(t.td,{children:"Bool"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"true"})," or ",(0,i.jsx)(t.code,{children:"false"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"true"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE SIM Pin"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"PIN "})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["4 digits pin, e.g. ",(0,i.jsx)(t.code,{children:"1234"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE DNS Servers used"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"DNS "})}),(0,i.jsx)(t.td,{children:"IP"}),(0,i.jsx)(t.td,{children:"List of DNS server IPs"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"9.9.9.9,1.1.1.1 "})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Plain UDP Host"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#plainUdp",children:(0,i.jsx)(t.code,{children:"UdpHost "})})}),(0,i.jsx)(t.td,{children:"IP"}),(0,i.jsxs)(t.td,{children:["any, e.g ",(0,i.jsx)(t.code,{children:"94.130.20.37"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Plain UDP Port"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#plainUdp",children:(0,i.jsx)(t.code,{children:"UdpPort "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["any, e.g ",(0,i.jsx)(t.code,{children:"3333"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"platformhost",children:(0,i.jsx)(t.code,{children:"Host"})}),"\n",(0,i.jsxs)(t.p,{children:["Hostname or IP of the Lobaro Platform instance ",(0,i.jsx)(t.strong,{children:"CoAP endpoint"})," to which the gateway communicates using UDP."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Using DTLS: ",(0,i.jsx)(t.code,{children:"coaps://platform.lobaro.com"})]}),"\n",(0,i.jsxs)(t.li,{children:["No DTLS: ",(0,i.jsx)(t.code,{children:"coap://platform.lobaro.com"})]}),"\n",(0,i.jsxs)(t.li,{children:["Plain IP: ",(0,i.jsx)(t.code,{children:"94.130.20.37"})," (platform.lobaro.com)"]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{title:"Host with fallback",type:"tip",children:(0,i.jsxs)(t.p,{children:["It's also possible to configure a list of URLs to implement a fallback mechanism. This is particulary helpful for\ncombining DTLS and non DTLS connection attempts: ",(0,i.jsx)(t.code,{children:"coaps://platform.lobaro.com,coap://platform.lobaro.com "})]})}),"\n",(0,i.jsx)(t.admonition,{title:"Alternative endpoints",type:"info",children:(0,i.jsxs)(t.p,{children:["For this firmware the Lobaro IoT platform is mandatory. Other products may have options for additional endpoints, e.g.\ndirect ",(0,i.jsx)(t.strong,{children:"MQTT"})," communication.\nPlease refer to the product specific documentation and/or contact Lobaro for details on this topic."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.h4,{id:"lteparam",children:[(0,i.jsx)(t.code,{children:"APN"})," ",(0,i.jsx)(t.code,{children:"Operator"})," ",(0,i.jsx)(t.code,{children:"Band"})]}),"\n",(0,i.jsxs)(t.p,{children:["Basic params to configure the NB-IoT or LTE-M connection. These parameters must be set in accordance to the SIM card and\nnetwork provider used. Usually the defaults for these parameters work quite well since they allow the modem to select\nand join the network\nusing information on the SIM-card. Nevertheless, if known, the ",(0,i.jsx)(t.code,{children:"APN"})," should be configured."]}),"\n",(0,i.jsx)(t.admonition,{title:"in depth description",type:"tip",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/iot/configuration/lte-network-configuration",children:"Read more"})," about LTE network configuration parameters."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.h4,{id:"ltenet",children:[(0,i.jsx)(t.code,{children:"UseNbiot"})," ",(0,i.jsx)(t.code,{children:"UseLtem"})]}),"\n",(0,i.jsxs)(t.p,{children:["The modem supports both NB-IoT and LTE-M technologies. Usually both are enabled and the cellular modem automatically\ndecides\nwith network type it should use at a specific location in the field. By setting one parameter to ",(0,i.jsx)(t.code,{children:"false"})," you can insist\non\nusing the other technology. At least one parameter must stay enabled, e.g. set to ",(0,i.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,i.jsx)(t.admonition,{type:"warning",children:(0,i.jsxs)(t.p,{children:["On older nRF91 modem firmware (MFW < ",(0,i.jsx)(t.code,{children:"1.3.0"}),") only one of this parameter can be enabled at a time, trying to set both\nto ",(0,i.jsx)(t.code,{children:"true"}),"\nwill\nresult in selecting just NB-IoT."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.h4,{id:"plainUdp",children:[(0,i.jsx)(t.code,{children:"UdpHost"})," ",(0,i.jsx)(t.code,{children:"UdpPort"})]}),"\n",(0,i.jsx)(t.p,{children:"Instead of sending the metering data to the lobaro platform these data can alternatively send to an external UDP socket.\nThis is helpful if you don't want your metering data on any external server but want to control your gateways using the\nLobaro Platform."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"UdpHost"}),": Separate IP to upload plain telegrams via UDP","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"[not set]"})," = upload to Lobaro IoT Platform using Host parameter address"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"UdpPort"}),": Separate Port to upload plain telegrams via UDP","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"only used when UdpHost is set"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.admonition,{type:"info",children:[(0,i.jsx)(t.p,{children:"Even the metering data is send to an external server the firmware normally still needs a connection a Lobaro Platform\ninstance for sending status information or performing remote configuration / firmware updates."}),(0,i.jsx)(t.p,{children:"If needed contact Lobaro for possible options to handle all communication without our platform, e.g. using direct MQTT\nto an external broker."})]}),"\n",(0,i.jsx)(t.h3,{id:"lorawanparams",children:"LoRaWAN Connection"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Key"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Possible Values"}),(0,i.jsx)(t.th,{children:"Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN DevEUI"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"DevEUI "})}),(0,i.jsx)(t.td,{children:"byte[8]"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"Device EUI64"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN AppEUI / JoinEUI (1.1)"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"JoinEUI "})}),(0,i.jsx)(t.td,{children:"byte[8]"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"random"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN AppKey"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"AppKey "})}),(0,i.jsx)(t.td,{children:"byte[16]"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"random"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN NwkKey (1.1)"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"NwkKey "})}),(0,i.jsx)(t.td,{children:"byte[16]"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"random"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN Days between Timesync"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"TimeSync "})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"3"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN Payload Format"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#payloadformat",children:(0,i.jsx)(t.code,{children:"PayloadFormat"})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"0"}),", ",(0,i.jsx)(t.code,{children:"1"}),", ",(0,i.jsx)(t.code,{children:"2"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN use OTAA"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"OTAA "})}),(0,i.jsx)(t.td,{children:"Bool"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"true"})," or ",(0,i.jsx)(t.code,{children:"false"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"true"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN Random TX Delay [s]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"RndDelay "})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"10"})})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"payloadformat",children:(0,i.jsx)(t.code,{children:"PayloadFormat"})}),"\n",(0,i.jsx)(t.p,{children:"Used encoding of the LoRaWAN uplink payload packets."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"0"})," = Encoding in ports"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"1"})," = prefix bytes and time"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"2"})," = prefix bytes, time, and rssi"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"special",children:"Special"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Key"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Possible Values"}),(0,i.jsx)(t.th,{style:{textAlign:"center"},children:"Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Verbose UART Log"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"verbose "})}),(0,i.jsx)(t.td,{children:"Bool"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"true"})," or ",(0,i.jsx)(t.code,{children:"false"})]}),(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.code,{children:"false"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Addon RAM configuration"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"extRam "})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsx)(t.td,{children:"Lobaro Internal"}),(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.code,{children:"[not set]"})})]})]})]})]})}function a(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,t,n)=>{"use strict";n.d(t,{R:()=>d,x:()=>s});var i=n(6540);const l={},r=i.createContext(l);function d(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:d(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c3c3fdd3.4e7399d7.js b/assets/js/c3c3fdd3.4e7399d7.js deleted file mode 100644 index cc52131b..00000000 --- a/assets/js/c3c3fdd3.4e7399d7.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8622],{9564:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/images/ideal-img/Hybrid-Connectivity-highRes.a71ede1.1108.png 1108w",images:[{path:n.p+"assets/images/ideal-img/Hybrid-Connectivity-highRes.a71ede1.1108.png",width:1108,height:316}],src:n.p+"assets/images/ideal-img/Hybrid-Connectivity-highRes.a71ede1.1108.png",toString:function(){return n.p+"assets/images/ideal-img/Hybrid-Connectivity-highRes.a71ede1.1108.png"},placeholder:void 0,width:1108,height:316},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAdUlEQVR4nDXDuwrCMABA0fz/h4gEHBTsKFUQBKsRN62IivRBk9QYstg2Vxw8cEThLKVpGEnJcjYl7HdY71HnK/n9ydFFcvdBSLVinKUkhw2n2wX8m0dRMVmsSbeKedmR2Q7RDwN9jGhjqOqaRmv0b/sihMDfF5ftbOzIpZURAAAAAElFTkSuQmCC"}},2587:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>o});var i=n(4848),l=n(8453);const r={sidebar_position:1,displayed_sidebar:"componentsSidebar",title:"Configuration Parameter"},d="Configuration",s={id:"components/firmware/app-nrf9160-wmbus/configuration-parameter",title:"Configuration Parameter",description:"On this page all common configuration parameters of the firmware are presented. Usually the internal defaults work",source:"@site/docs/components/firmware/app-nrf9160-wmbus/configuration-parameter.md",sourceDirName:"components/firmware/app-nrf9160-wmbus",slug:"/components/firmware/app-nrf9160-wmbus/configuration-parameter",permalink:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/firmware/app-nrf9160-wmbus/configuration-parameter.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,displayed_sidebar:"componentsSidebar",title:"Configuration Parameter"},sidebar:"componentsSidebar",previous:{title:"Introduction",permalink:"/iot/components/firmware/app-nrf9160-wmbus/introduction"},next:{title:"LoRaWAN Communication",permalink:"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol"}},c={},o=[{value:"Firmware Configuration Parameter",id:"firmware-configuration-parameter",level:2},{value:"General",id:"general",level:3},{value:"WAN",id:"wan",level:4},{value:"Limitations in LoRaWAN vs. NB-IoT / LTE-M",id:"limitations-in-lorawan-vs-nb-iot--lte-m",level:4},{value:"Meter Scanning",id:"meter-scanning",level:3},{value:"listenCron",id:"listencron",level:4},{value:"cmodeDurSec smodeDurSec xmodeDurSec umodeDurSec",id:"durations",level:4},{value:"devFilter ciFilter mFilter typFilter",id:"filter",level:4},{value:"maxTelegrams",id:"maxtelegrams",level:4},{value:"LTE Connection",id:"lteconnection",level:3},{value:"Host",id:"platformhost",level:4},{value:"APN Operator Band",id:"lteparam",level:4},{value:"UseNbiot UseLtem",id:"ltenet",level:4},{value:"UdpHost UdpPort",id:"plainUdp",level:4},{value:"LoRaWAN Connection",id:"lorawanparams",level:3},{value:"PayloadFormat",id:"payloadformat",level:4},{value:"Special",id:"special",level:3}];function a(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components},{Image:r}=t;return r||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(t.p,{children:"On this page all common configuration parameters of the firmware are presented. Usually the internal defaults work\nquite well to get the device up and running."}),"\n",(0,i.jsx)(t.admonition,{title:"Customer specific configuration",type:"note",children:(0,i.jsx)(t.p,{children:"For larger orders Lobaro can apply a custom customer specific configuration for all parameter before\ndelivery."})}),"\n",(0,i.jsx)(t.h2,{id:"firmware-configuration-parameter",children:"Firmware Configuration Parameter"}),"\n",(0,i.jsx)(t.admonition,{title:"Product specific parameters possible",type:"info",children:(0,i.jsx)(t.p,{children:"The described configuration parameters are common for all products running this firmware. Nevertheless some products may\nadd additional parameters or alter the here described parameters, e.g. some allow additional values to be set. In any\ncase the documentation of the specific product takes precedence over this general description and should\nalso be read with care."})}),"\n",(0,i.jsx)(t.h3,{id:"general",children:"General"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Key"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Possible Values"}),(0,i.jsx)(t.th,{style:{textAlign:"center"},children:"Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE / LoRaWAN Selection"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#wan",children:(0,i.jsx)(t.code,{children:"WAN"})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"lte"})," or ",(0,i.jsx)(t.code,{children:"lorawan"})]}),(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.code,{children:"lte"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Days Without Connectivity Until Device Reset"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"LostReboot "})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Any, e.g. ",(0,i.jsx)(t.code,{children:"3"})]}),(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.code,{children:"5"})})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"wan",children:(0,i.jsx)(t.code,{children:"WAN"})}),"\n",(0,i.jsx)(t.p,{children:"LPWAN technology used for connection and data communication with the backend server. This can be either cellular LTE (\nNB-IoT, LTE-M) or LoRaWAN."}),"\n",(0,i.jsx)(r,{alt:"Lobaro Hybrid Connectivity LoRaWAN, NB-IoT, LTE-M",img:n(9564),style:{width:"40%",paddingTop:"5px",paddingBottom:"5px"}}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"lte"}),": use either cellular NB-IoT or LTE-M"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"lorawan"}),": use LoRaWAN with OTAA (over the air activation)"]}),"\n"]}),"\n",(0,i.jsx)(t.h4,{id:"limitations-in-lorawan-vs-nb-iot--lte-m",children:"Limitations in LoRaWAN vs. NB-IoT / LTE-M"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["LoRaWAN Uplinks and Downlinks are limited to 52-222 Bytes depending on the Spreading Factor (Connection Quality).","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Uplink with (longer) wMBUS Telegrams might be split over multiple LoRaWAN Messages."}),"\n",(0,i.jsx)(t.li,{children:"Uplinks of many wMBUS telegrams might take a long period of time due to duty-cycle limitations of LoRaWAN."}),"\n",(0,i.jsx)(t.li,{children:"Downlinks with big configuration values (e.g. long whitelist) must be split over multiple Downlinks which might be\ndifficult to implement."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Limited amount of meta-data:","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Less information in status telegram, due to reduced uplink channel capacity."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"meter-scanning",children:"Meter Scanning"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Key"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Possible Values"}),(0,i.jsxs)(t.th,{children:["Default",(0,i.jsx)("div",{style:{width:"120px"}})]})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS Listen Cron [UTC+0]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#listencron",children:(0,i.jsx)(t.code,{children:"listenCron "})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["Any ",(0,i.jsx)(t.a,{href:"/iot/configuration/cron-configuration",children:"CRON"})," String"]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0 0 12 * * *"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS C1/T1 Listen Duration [s]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#durations",children:(0,i.jsx)(t.code,{children:"cmodeDurSec "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Number of seconds",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"0"})," = Do not collect C1/T1",(0,i.jsx)("br",{}),"Max Value=",(0,i.jsx)(t.code,{children:"36000"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"300"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS S1 Listen Duration [s]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#durations",children:(0,i.jsx)(t.code,{children:"smodeDurSec "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Number of seconds",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"0"})," = Do not collect S1",(0,i.jsx)("br",{}),"Max Value=",(0,i.jsx)(t.code,{children:"36000"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Sensus RF Listen Duration [s]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#durations",children:(0,i.jsx)(t.code,{children:"xmodeDurSec "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Number of seconds",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"0"})," = Do not collect X-Mode",(0,i.jsx)("br",{}),"Max Value=",(0,i.jsx)(t.code,{children:"36000"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"M\xfcller-Funk Listen Duration [s]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#durations",children:(0,i.jsx)(t.code,{children:"umodeDurSec "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Number of seconds",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"0"})," = Do not collect U-Mode",(0,i.jsx)("br",{}),"Max Value=",(0,i.jsx)(t.code,{children:"36000"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS ID Filter List"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#filter",children:(0,i.jsx)(t.code,{children:"devFilter"})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["List, e.g.",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"88009035,13456035"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS Type Filter List"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#filter",children:(0,i.jsx)(t.code,{children:"typFilter "})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["List, e.g.",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"08,07"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS M-Field Filter List"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#filter",children:(0,i.jsx)(t.code,{children:"mFilter "})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["List, e.g.",(0,i.jsx)("br",{})," ",(0,i.jsx)(t.code,{children:"DME,ITW,SEN,QDS"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS CI-Field Filter List"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#filter",children:(0,i.jsx)(t.code,{children:"ciFilter"})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["List, e.g.",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"8a,72"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"WMBUS Telegram Upload Limit"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#maxtelegrams",children:(0,i.jsx)(t.code,{children:"maxTelegrams"})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["Any number of max. Telegrams",(0,i.jsx)("br",{}),(0,i.jsx)(t.code,{children:"0"})," = no limit."]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0"})})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"listencron",children:(0,i.jsx)(t.code,{children:"listenCron"})}),"\n",(0,i.jsx)(t.p,{children:"The listen cron defines when the device wakes up to receive the enabled wireless M-BUS and other radio protocols. Each\nlisten period is followed by uploading the data over the configured WAN technology. A reasonable interval strongly\ndepends on the\nproducts power supply (battery vs. external powered) and the application demand of new metering data. Typical values\nrange from every 15 minutes to 14\ndays between consecutive readouts."}),"\n",(0,i.jsx)(t.admonition,{title:"in depth description",type:"tip",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/iot/configuration/cron-configuration",children:"Read more"})," about CRON parameterization."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.h4,{id:"durations",children:[(0,i.jsx)(t.code,{children:"cmodeDurSec"})," ",(0,i.jsx)(t.code,{children:"smodeDurSec"})," ",(0,i.jsx)(t.code,{children:"xmodeDurSec"})," ",(0,i.jsx)(t.code,{children:"umodeDurSec"})]}),"\n",(0,i.jsxs)(t.p,{children:["Duration in seconds, e.g. ",(0,i.jsx)(t.code,{children:"300"})," (5 minutes), to collect metering data in corresponding wireless protocol. All listening\nperiods are executed one after the other for the duration defined. Afterwards all collected meter telegrams will be\ntransmitted using the configured ",(0,i.jsx)(t.code,{children:"WAN"})," technology."]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.h4,{id:"filter",children:[(0,i.jsx)(t.code,{children:"devFilter"})," ",(0,i.jsx)(t.code,{children:"ciFilter"})," ",(0,i.jsx)(t.code,{children:"mFilter"})," ",(0,i.jsx)(t.code,{children:"typFilter"})]}),"\n",(0,i.jsx)(t.p,{children:"Filter meters to be be collected and uploaded by wireless M-BUS related fields."}),"\n",(0,i.jsx)(t.admonition,{title:"in depth description",type:"tip",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/iot/configuration/meter-reception-filter-config",children:"Read more"})," about telegram filter parameterization."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h4,{id:"maxtelegrams",children:(0,i.jsx)(t.code,{children:"maxTelegrams"})}),"\n",(0,i.jsx)(t.p,{children:"Set hard limit on how many telegrams will be collected and uploaded. The firmware will stop collection, once this number\nhas been collected, regardless of the passed time. Can be used save battery / data volume, should the device be in an\narea with a large number of meters."}),"\n",(0,i.jsx)(t.h3,{id:"lteconnection",children:"LTE Connection"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Key"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Possible Values"}),(0,i.jsx)(t.th,{children:"Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE Lobaro Platform Host"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#platformhost",children:(0,i.jsx)(t.code,{children:"Host "})})}),(0,i.jsx)(t.td,{children:"IP / URL"}),(0,i.jsx)(t.td,{children:"List of various Endpoints"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"coaps://platform.lobaro.com"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE MCC+MNC Code"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#lteparam",children:(0,i.jsx)(t.code,{children:"Operator "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["e.g. ",(0,i.jsx)(t.code,{children:"26201"})," (Dt. Telekom)"]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE Band"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#lteparam",children:(0,i.jsx)(t.code,{children:"Band "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"3"})," or ",(0,i.jsx)(t.code,{children:"8,20"})," or ",(0,i.jsx)(t.code,{children:"3,8,20"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"3,8,20"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE APN"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#lteparam",children:(0,i.jsx)(t.code,{children:"APN "})})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsx)(t.td,{children:"any APN"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"*"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE NB-IoT on/off"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#ltenet",children:(0,i.jsx)(t.code,{children:"UseNbiot "})})}),(0,i.jsx)(t.td,{children:"Bool"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"true"})," or ",(0,i.jsx)(t.code,{children:"false"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"true"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE M1 on/off"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#ltenet",children:(0,i.jsx)(t.code,{children:"UseLtem "})})}),(0,i.jsx)(t.td,{children:"Bool"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"true"})," or ",(0,i.jsx)(t.code,{children:"false"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"true"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE SIM Pin"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"PIN "})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["4 digits pin, e.g. ",(0,i.jsx)(t.code,{children:"1234"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LTE DNS Servers used"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"DNS "})}),(0,i.jsx)(t.td,{children:"IP"}),(0,i.jsx)(t.td,{children:"List of DNS server IPs"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"9.9.9.9,1.1.1.1 "})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Plain UDP Host"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#plainUdp",children:(0,i.jsx)(t.code,{children:"UdpHost "})})}),(0,i.jsx)(t.td,{children:"IP"}),(0,i.jsxs)(t.td,{children:["any, e.g ",(0,i.jsx)(t.code,{children:"94.130.20.37"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Plain UDP Port"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#plainUdp",children:(0,i.jsx)(t.code,{children:"UdpPort "})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:["any, e.g ",(0,i.jsx)(t.code,{children:"3333"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"[not set]"})})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"platformhost",children:(0,i.jsx)(t.code,{children:"Host"})}),"\n",(0,i.jsxs)(t.p,{children:["Hostname or IP of the Lobaro Platform instance ",(0,i.jsx)(t.strong,{children:"CoAP endpoint"})," to which the gateway communicates using UDP."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Using DTLS: ",(0,i.jsx)(t.code,{children:"coaps://platform.lobaro.com"})]}),"\n",(0,i.jsxs)(t.li,{children:["No DTLS: ",(0,i.jsx)(t.code,{children:"coap://platform.lobaro.com"})]}),"\n",(0,i.jsxs)(t.li,{children:["Plain IP: ",(0,i.jsx)(t.code,{children:"94.130.20.37"})," (platform.lobaro.com)"]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{title:"Host with fallback",type:"tip",children:(0,i.jsxs)(t.p,{children:["It's also possible to configure a list of URLs to implement a fallback mechanism. This is particulary helpful for\ncombining DTLS and non DTLS connection attempts: ",(0,i.jsx)(t.code,{children:"coaps://platform.lobaro.com,coap://platform.lobaro.com "})]})}),"\n",(0,i.jsx)(t.admonition,{title:"Alternative endpoints",type:"info",children:(0,i.jsxs)(t.p,{children:["For this firmware the Lobaro IoT platform is mandatory. Other products may have options for additional endpoints, e.g.\ndirect ",(0,i.jsx)(t.strong,{children:"MQTT"})," communication.\nPlease refer to the product specific documentation and/or contact Lobaro for details on this topic."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.h4,{id:"lteparam",children:[(0,i.jsx)(t.code,{children:"APN"})," ",(0,i.jsx)(t.code,{children:"Operator"})," ",(0,i.jsx)(t.code,{children:"Band"})]}),"\n",(0,i.jsxs)(t.p,{children:["Basic params to configure the NB-IoT or LTE-M connection. These parameters must be set in accordance to the SIM card and\nnetwork provider used. Usually the defaults for these parameters work quite well since they allow the modem to select\nand join the network\nusing information on the SIM-card. Nevertheless, if known, the ",(0,i.jsx)(t.code,{children:"APN"})," should be configured."]}),"\n",(0,i.jsx)(t.admonition,{title:"in depth description",type:"tip",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/iot/configuration/lte-network-configuration",children:"Read more"})," about LTE network configuration parameters."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.h4,{id:"ltenet",children:[(0,i.jsx)(t.code,{children:"UseNbiot"})," ",(0,i.jsx)(t.code,{children:"UseLtem"})]}),"\n",(0,i.jsxs)(t.p,{children:["The modem supports both NB-IoT and LTE-M technologies. Usually both are enabled and the cellular modem automatically\ndecides\nwith network type it should use at a specific location in the field. By setting one parameter to ",(0,i.jsx)(t.code,{children:"false"})," you can insist\non\nusing the other technology. At least one parameter must stay enabled, e.g. set to ",(0,i.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,i.jsx)(t.admonition,{type:"warning",children:(0,i.jsxs)(t.p,{children:["On older nRF91 modem firmware (MFW < ",(0,i.jsx)(t.code,{children:"1.3.0"}),") only one of this parameter can be enabled at a time, trying to set both\nto ",(0,i.jsx)(t.code,{children:"true"}),"\nwill\nresult in selecting just NB-IoT."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.h4,{id:"plainUdp",children:[(0,i.jsx)(t.code,{children:"UdpHost"})," ",(0,i.jsx)(t.code,{children:"UdpPort"})]}),"\n",(0,i.jsx)(t.p,{children:"Instead of sending the metering data to the lobaro platform these data can alternatively send to an external UDP socket.\nThis is helpful if you don't want your metering data on any external server but want to control your gateways using the\nLobaro Platform."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"UdpHost"}),": Separate IP to upload plain telegrams via UDP","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"[not set]"})," = upload to Lobaro IoT Platform using Host parameter address"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"UdpPort"}),": Separate Port to upload plain telegrams via UDP","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"only used when UdpHost is set"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.admonition,{type:"info",children:[(0,i.jsx)(t.p,{children:"Even the metering data is send to an external server the firmware normally still needs a connection a Lobaro Platform\ninstance for sending status information or performing remote configuration / firmware updates."}),(0,i.jsx)(t.p,{children:"If needed contact Lobaro for possible options to handle all communication without our platform, e.g. using direct MQTT\nto an external broker."})]}),"\n",(0,i.jsx)(t.h3,{id:"lorawanparams",children:"LoRaWAN Connection"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Key"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Possible Values"}),(0,i.jsx)(t.th,{children:"Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN DevEUI"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"DevEUI "})}),(0,i.jsx)(t.td,{children:"byte[8]"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"Device EUI64"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN AppEUI / JoinEUI (1.1)"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"JoinEUI "})}),(0,i.jsx)(t.td,{children:"byte[8]"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"random"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN AppKey"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"AppKey "})}),(0,i.jsx)(t.td,{children:"byte[16]"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"random"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN NwkKey (1.1)"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"NwkKey "})}),(0,i.jsx)(t.td,{children:"byte[16]"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"random"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN Days between Timesync"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"TimeSync "})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"3"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN Payload Format"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)("a",{href:"#payloadformat",children:(0,i.jsx)(t.code,{children:"PayloadFormat"})})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"0"}),", ",(0,i.jsx)(t.code,{children:"1"}),", ",(0,i.jsx)(t.code,{children:"2"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"0"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN use OTAA"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"OTAA "})}),(0,i.jsx)(t.td,{children:"Bool"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"true"})," or ",(0,i.jsx)(t.code,{children:"false"})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"true"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"LoRaWAN Random TX Delay [s]"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"RndDelay "})}),(0,i.jsx)(t.td,{children:"Number"}),(0,i.jsx)(t.td,{children:"any"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"10"})})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"payloadformat",children:(0,i.jsx)(t.code,{children:"PayloadFormat"})}),"\n",(0,i.jsx)(t.p,{children:"Used encoding of the LoRaWAN uplink payload packets."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"0"})," = Encoding in ports"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"1"})," = prefix bytes and time"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"2"})," = prefix bytes, time, and rssi"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"special",children:"Special"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Key"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Possible Values"}),(0,i.jsx)(t.th,{style:{textAlign:"center"},children:"Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Verbose UART Log"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"verbose "})}),(0,i.jsx)(t.td,{children:"Bool"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"true"})," or ",(0,i.jsx)(t.code,{children:"false"})]}),(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.code,{children:"false"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Addon RAM configuration"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:(0,i.jsx)(t.code,{children:"extRam "})}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsx)(t.td,{children:"Lobaro Internal"}),(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.code,{children:"[not set]"})})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453:(e,t,n)=>{"use strict";n.d(t,{R:()=>d,x:()=>s});var i=n(6540);const l={},r=i.createContext(l);function d(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:d(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cd2a62e8.561fe4e4.js b/assets/js/cd2a62e8.561fe4e4.js new file mode 100644 index 00000000..84d1a828 --- /dev/null +++ b/assets/js/cd2a62e8.561fe4e4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[590],{7992:(t,n,e)=>{e.r(n),e.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var i=e(4848),o=e(8453);const r={sidebar_position:0},s="Integrations",a={id:"platform/integrations/index",title:"Integrations",description:"This page is not ready yet",source:"@site/docs/platform/integrations/index.md",sourceDirName:"platform/integrations",slug:"/platform/integrations/",permalink:"/iot/platform/integrations/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/integrations/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"allDocSidebar",previous:{title:"Overview",permalink:"/iot/platform/"},next:{title:"Administration",permalink:"/iot/platform/administration/"}},l={},c=[];function d(t){const n={admonition:"admonition",h1:"h1",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"integrations",children:"Integrations"}),"\n",(0,i.jsx)(n.admonition,{title:"Work in progress",type:"warning",children:(0,i.jsx)(n.p,{children:"This page is not ready yet"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"TODO:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"LoRaWAN Server Integration (Chripstack)"}),"\n"]})]})}function p(t={}){const{wrapper:n}={...(0,o.R)(),...t.components};return n?(0,i.jsx)(n,{...t,children:(0,i.jsx)(d,{...t})}):d(t)}},8453:(t,n,e)=>{e.d(n,{R:()=>s,x:()=>a});var i=e(6540);const o={},r=i.createContext(o);function s(t){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof t?t(n):{...n,...t}}),[n,t])}function a(t){let n;return n=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:s(t.components),i.createElement(r.Provider,{value:n},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/cd2a62e8.9b260d40.js b/assets/js/cd2a62e8.9b260d40.js deleted file mode 100644 index 70fea73b..00000000 --- a/assets/js/cd2a62e8.9b260d40.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[590],{7992:(t,n,e)=>{e.r(n),e.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var i=e(4848),o=e(8453);const r={sidebar_position:0,displayed_sidebar:"cloudSidebar"},s="Integrations",a={id:"platform/integrations/index",title:"Integrations",description:"This page is not ready yet",source:"@site/docs/platform/integrations/index.md",sourceDirName:"platform/integrations",slug:"/platform/integrations/",permalink:"/iot/platform/integrations/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/integrations/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,displayed_sidebar:"cloudSidebar"},sidebar:"cloudSidebar",previous:{title:"Overview",permalink:"/iot/platform/"},next:{title:"Administration",permalink:"/iot/platform/administration/"}},d={},l=[];function c(t){const n={admonition:"admonition",h1:"h1",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"integrations",children:"Integrations"}),"\n",(0,i.jsx)(n.admonition,{title:"Work in progress",type:"warning",children:(0,i.jsx)(n.p,{children:"This page is not ready yet"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"TODO:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"LoRaWAN Server Integration (Chripstack)"}),"\n"]})]})}function p(t={}){const{wrapper:n}={...(0,o.R)(),...t.components};return n?(0,i.jsx)(n,{...t,children:(0,i.jsx)(c,{...t})}):c(t)}},8453:(t,n,e)=>{e.d(n,{R:()=>s,x:()=>a});var i=e(6540);const o={},r=i.createContext(o);function s(t){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof t?t(n):{...n,...t}}),[n,t])}function a(t){let n;return n=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:s(t.components),i.createElement(r.Provider,{value:n},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/cf2baa63.39eca66d.js b/assets/js/cf2baa63.39eca66d.js deleted file mode 100644 index 642964dd..00000000 --- a/assets/js/cf2baa63.39eca66d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8243],{6023:(s,e,t)=>{t.r(e),t.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>d,metadata:()=>c,toc:()=>a});var r=t(4848),n=t(8453);const d={},i="Monitoring",c={id:"platform/administration/monitoring",title:"Monitoring",description:"admin",source:"@site/docs/platform/administration/monitoring.md",sourceDirName:"platform/administration",slug:"/platform/administration/monitoring",permalink:"/iot/platform/administration/monitoring",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/monitoring.md",tags:[],version:"current",frontMatter:{},sidebar:"cloudSidebar",previous:{title:"Datasources",permalink:"/iot/platform/administration/datasources"},next:{title:"Server Certificates",permalink:"/iot/platform/administration/server-certificates"}},o={},a=[{value:"Metrics",id:"metrics",level:2},{value:"Useful Queries",id:"useful-queries",level:2}];function l(s){const e={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...s.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h1,{id:"monitoring",children:"Monitoring"}),"\n",(0,r.jsx)(e.admonition,{title:"Required roles",type:"info",children:(0,r.jsx)(e.p,{children:"admin"})}),"\n",(0,r.jsxs)(e.p,{children:["Monitoring is realized via ",(0,r.jsx)(e.a,{href:"https://prometheus.io/",children:"Prometheus"})," and can be visualized e.g.\nwith ",(0,r.jsx)(e.a,{href:"https://grafana.com/",children:"Grafana"}),"."]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["Prometheus Endpoint: ",(0,r.jsx)(e.code,{children:"/metrics"})," (e.g. ",(0,r.jsx)(e.a,{href:"https://platform.lobaro.com/metrics",children:"https://platform.lobaro.com/metrics"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Authorization: Bearer Token can be created at ",(0,r.jsx)(e.code,{children:"Configuration \u2192 Admin Tokens"})]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"metrics",children:"Metrics"}),"\n",(0,r.jsx)(e.p,{children:"Types:"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.strong,{children:"Counter"})," is a single counter that can only go up"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.strong,{children:"Gauge"})," is a single value that can go up and down"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.strong,{children:"Histogram"})," has 3 metrics with suffix ",(0,r.jsx)(e.code,{children:"_bucket"}),", ",(0,r.jsx)(e.code,{children:"_count"})," and ",(0,r.jsx)(e.code,{children:"_sum"})]}),"\n"]}),"\n",(0,r.jsxs)(e.table,{children:[(0,r.jsx)(e.thead,{children:(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.th,{children:"Name"}),(0,r.jsx)(e.th,{children:"Type"}),(0,r.jsx)(e.th,{children:"Description"})]})}),(0,r.jsxs)(e.tbody,{children:[(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"coap_request_duration_seconds"}),(0,r.jsx)(e.td,{children:"Histogram"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"go_gc_duration"}),(0,r.jsx)(e.td,{children:"Histogram"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"go_goroutines"}),(0,r.jsx)(e.td,{children:"Counter"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"go_info"}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{children:"States the go release version"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["go_memstats_alloc_bytes",(0,r.jsx)("br",{}),"go_memstats_alloc_bytes_total",(0,r.jsx)("br",{}),"go_memstats_buck_hash_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_frees_total",(0,r.jsx)("br",{}),"go_memstats_gc_cpu_fraction",(0,r.jsx)("br",{}),"go_memstats_gc_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_heap_alloc_bytes",(0,r.jsx)("br",{}),"go_memstats_heap_idle_bytes",(0,r.jsx)("br",{}),"go_memstats_heap_inuse_bytes",(0,r.jsx)("br",{}),"go_memstats_heap_objects",(0,r.jsx)("br",{}),"go_memstats_heap_released_bytes",(0,r.jsx)("br",{}),"go_memstats_heap_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_last_gc_time_seconds",(0,r.jsx)("br",{}),"go_memstats_lookups_total",(0,r.jsx)("br",{}),"go_memstats_mallocs_total",(0,r.jsx)("br",{}),"go_memstats_mcache_inuse_bytes",(0,r.jsx)("br",{}),"go_memstats_mcache_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_mspan_inuse_bytes",(0,r.jsx)("br",{}),"go_memstats_mspan_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_next_gc_bytes",(0,r.jsx)("br",{}),"go_memstats_other_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_stack_inuse_bytes",(0,r.jsx)("br",{}),"go_memstats_stack_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_sys_bytes"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"go_threads"}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["http_publish_errors",(0,r.jsx)("br",{}),"http_publish_successfully"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"mbus_apiAccessCounter"}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["mqtt_publish_errors",(0,r.jsx)("br",{}),"mqtt_publish_successfully"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"parser_runtime_seconds"}),(0,r.jsx)(e.td,{children:"Histogram"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["process_cpu_seconds_total",(0,r.jsx)("br",{}),"process_max_fds",(0,r.jsx)("br",{}),"process_open_fds",(0,r.jsx)("br",{}),"process_resident_memory_bytes",(0,r.jsx)("br",{}),"process_start_time_seconds",(0,r.jsx)("br",{}),"process_virtual_memory_bytes",(0,r.jsx)("br",{}),"process_virtual_memory_max_bytes"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["promhttp_metric_handler_requests_in_flight",(0,r.jsx)("br",{}),"promhttp_metric_handler_requests_total"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["scrape_duration_seconds",(0,r.jsx)("br",{}),"scrape_samples_post_metric_relabeling",(0,r.jsx)("br",{}),"scrape_samples_scraped",(0,r.jsx)("br",{}),"scrape_series_added"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"up"}),(0,r.jsx)(e.td,{children:"Gauge"}),(0,r.jsx)(e.td,{})]})]})]}),"\n",(0,r.jsx)(e.h2,{id:"useful-queries",children:"Useful Queries"}),"\n",(0,r.jsxs)(e.table,{children:[(0,r.jsx)(e.thead,{children:(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.th,{children:"Query"}),(0,r.jsx)(e.th,{children:"Type"}),(0,r.jsx)(e.th,{children:"Description"})]})}),(0,r.jsxs)(e.tbody,{children:[(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(graphql_request_duration_seconds_sum{job="$Instance"}[1m]) / (rate(graphql_request_duration_seconds_count{job="$Instance"}[1m]) + 0.000001) * 1000'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"GraphQL Response Time"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(graphql_resolver_duration_seconds_sum{job="$Instance"}[1m]) / (rate(graphql_resolver_duration_seconds_count{job="$Instance"}[1m]) + 0.000001) * 1000'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"GraphQL Resolver Time"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(parser_runtime_seconds_sum{job="$Instance"}[60s]) / (rate(parser_runtime_seconds_count{job="$Instance"}[60s]) + 0.0001) * 1000'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"Parser Run Time"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(mbus_apiAccessCounter{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"MBUS API calls per minute"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(coap_request_duration_seconds_sum{job="$Instance"}[1m]) / (rate(coap_request_duration_seconds_count{job="$Instance"}[1m]) + 0.000001)'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"COAP Response Times"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(mqtt_publish_errors{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"Integrations calls per minute"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(mqtt_publish_successfully{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(http_publish_successfully{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(http_publish_errors{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(coap_request_duration_seconds_count{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"Sum COAP Calls per minute"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'go_memstats_alloc_bytes{job="$Instance"} + go_memstats_stack_inuse_bytes{job="$Instance"}'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"Memory Usage: Heap + Stack"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'go_memstats_sys_bytes{job="$Instance"}'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsxs)(e.td,{children:["Memory Usage",":System"," Memory"]})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'go_memstats_alloc_bytes{job="$Instance"}'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsxs)(e.td,{children:["Memory Usage",":Heap"]})]})]})]})]})}function h(s={}){const{wrapper:e}={...(0,n.R)(),...s.components};return e?(0,r.jsx)(e,{...s,children:(0,r.jsx)(l,{...s})}):l(s)}},8453:(s,e,t)=>{t.d(e,{R:()=>i,x:()=>c});var r=t(6540);const n={},d=r.createContext(n);function i(s){const e=r.useContext(d);return r.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function c(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(n):s.components||n:i(s.components),r.createElement(d.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/cf2baa63.5176ba05.js b/assets/js/cf2baa63.5176ba05.js new file mode 100644 index 00000000..29a79f95 --- /dev/null +++ b/assets/js/cf2baa63.5176ba05.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8243],{6023:(s,e,t)=>{t.r(e),t.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>d,metadata:()=>c,toc:()=>a});var r=t(4848),n=t(8453);const d={},i="Monitoring",c={id:"platform/administration/monitoring",title:"Monitoring",description:"admin",source:"@site/docs/platform/administration/monitoring.md",sourceDirName:"platform/administration",slug:"/platform/administration/monitoring",permalink:"/iot/platform/administration/monitoring",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/administration/monitoring.md",tags:[],version:"current",frontMatter:{},sidebar:"allDocSidebar",previous:{title:"Datasources",permalink:"/iot/platform/administration/datasources"},next:{title:"Server Certificates",permalink:"/iot/platform/administration/server-certificates"}},o={},a=[{value:"Metrics",id:"metrics",level:2},{value:"Useful Queries",id:"useful-queries",level:2}];function l(s){const e={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...s.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h1,{id:"monitoring",children:"Monitoring"}),"\n",(0,r.jsx)(e.admonition,{title:"Required roles",type:"info",children:(0,r.jsx)(e.p,{children:"admin"})}),"\n",(0,r.jsxs)(e.p,{children:["Monitoring is realized via ",(0,r.jsx)(e.a,{href:"https://prometheus.io/",children:"Prometheus"})," and can be visualized e.g.\nwith ",(0,r.jsx)(e.a,{href:"https://grafana.com/",children:"Grafana"}),"."]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["Prometheus Endpoint: ",(0,r.jsx)(e.code,{children:"/metrics"})," (e.g. ",(0,r.jsx)(e.a,{href:"https://platform.lobaro.com/metrics",children:"https://platform.lobaro.com/metrics"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Authorization: Bearer Token can be created at ",(0,r.jsx)(e.code,{children:"Configuration \u2192 Admin Tokens"})]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"metrics",children:"Metrics"}),"\n",(0,r.jsx)(e.p,{children:"Types:"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.strong,{children:"Counter"})," is a single counter that can only go up"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.strong,{children:"Gauge"})," is a single value that can go up and down"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.strong,{children:"Histogram"})," has 3 metrics with suffix ",(0,r.jsx)(e.code,{children:"_bucket"}),", ",(0,r.jsx)(e.code,{children:"_count"})," and ",(0,r.jsx)(e.code,{children:"_sum"})]}),"\n"]}),"\n",(0,r.jsxs)(e.table,{children:[(0,r.jsx)(e.thead,{children:(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.th,{children:"Name"}),(0,r.jsx)(e.th,{children:"Type"}),(0,r.jsx)(e.th,{children:"Description"})]})}),(0,r.jsxs)(e.tbody,{children:[(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"coap_request_duration_seconds"}),(0,r.jsx)(e.td,{children:"Histogram"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"go_gc_duration"}),(0,r.jsx)(e.td,{children:"Histogram"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"go_goroutines"}),(0,r.jsx)(e.td,{children:"Counter"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"go_info"}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{children:"States the go release version"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["go_memstats_alloc_bytes",(0,r.jsx)("br",{}),"go_memstats_alloc_bytes_total",(0,r.jsx)("br",{}),"go_memstats_buck_hash_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_frees_total",(0,r.jsx)("br",{}),"go_memstats_gc_cpu_fraction",(0,r.jsx)("br",{}),"go_memstats_gc_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_heap_alloc_bytes",(0,r.jsx)("br",{}),"go_memstats_heap_idle_bytes",(0,r.jsx)("br",{}),"go_memstats_heap_inuse_bytes",(0,r.jsx)("br",{}),"go_memstats_heap_objects",(0,r.jsx)("br",{}),"go_memstats_heap_released_bytes",(0,r.jsx)("br",{}),"go_memstats_heap_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_last_gc_time_seconds",(0,r.jsx)("br",{}),"go_memstats_lookups_total",(0,r.jsx)("br",{}),"go_memstats_mallocs_total",(0,r.jsx)("br",{}),"go_memstats_mcache_inuse_bytes",(0,r.jsx)("br",{}),"go_memstats_mcache_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_mspan_inuse_bytes",(0,r.jsx)("br",{}),"go_memstats_mspan_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_next_gc_bytes",(0,r.jsx)("br",{}),"go_memstats_other_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_stack_inuse_bytes",(0,r.jsx)("br",{}),"go_memstats_stack_sys_bytes",(0,r.jsx)("br",{}),"go_memstats_sys_bytes"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"go_threads"}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["http_publish_errors",(0,r.jsx)("br",{}),"http_publish_successfully"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"mbus_apiAccessCounter"}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["mqtt_publish_errors",(0,r.jsx)("br",{}),"mqtt_publish_successfully"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"parser_runtime_seconds"}),(0,r.jsx)(e.td,{children:"Histogram"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["process_cpu_seconds_total",(0,r.jsx)("br",{}),"process_max_fds",(0,r.jsx)("br",{}),"process_open_fds",(0,r.jsx)("br",{}),"process_resident_memory_bytes",(0,r.jsx)("br",{}),"process_start_time_seconds",(0,r.jsx)("br",{}),"process_virtual_memory_bytes",(0,r.jsx)("br",{}),"process_virtual_memory_max_bytes"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["promhttp_metric_handler_requests_in_flight",(0,r.jsx)("br",{}),"promhttp_metric_handler_requests_total"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsxs)(e.td,{children:["scrape_duration_seconds",(0,r.jsx)("br",{}),"scrape_samples_post_metric_relabeling",(0,r.jsx)("br",{}),"scrape_samples_scraped",(0,r.jsx)("br",{}),"scrape_series_added"]}),(0,r.jsx)(e.td,{}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"up"}),(0,r.jsx)(e.td,{children:"Gauge"}),(0,r.jsx)(e.td,{})]})]})]}),"\n",(0,r.jsx)(e.h2,{id:"useful-queries",children:"Useful Queries"}),"\n",(0,r.jsxs)(e.table,{children:[(0,r.jsx)(e.thead,{children:(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.th,{children:"Query"}),(0,r.jsx)(e.th,{children:"Type"}),(0,r.jsx)(e.th,{children:"Description"})]})}),(0,r.jsxs)(e.tbody,{children:[(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(graphql_request_duration_seconds_sum{job="$Instance"}[1m]) / (rate(graphql_request_duration_seconds_count{job="$Instance"}[1m]) + 0.000001) * 1000'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"GraphQL Response Time"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(graphql_resolver_duration_seconds_sum{job="$Instance"}[1m]) / (rate(graphql_resolver_duration_seconds_count{job="$Instance"}[1m]) + 0.000001) * 1000'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"GraphQL Resolver Time"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(parser_runtime_seconds_sum{job="$Instance"}[60s]) / (rate(parser_runtime_seconds_count{job="$Instance"}[60s]) + 0.0001) * 1000'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"Parser Run Time"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(mbus_apiAccessCounter{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"MBUS API calls per minute"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(coap_request_duration_seconds_sum{job="$Instance"}[1m]) / (rate(coap_request_duration_seconds_count{job="$Instance"}[1m]) + 0.000001)'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"COAP Response Times"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(mqtt_publish_errors{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"Integrations calls per minute"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(mqtt_publish_successfully{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(http_publish_successfully{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(http_publish_errors{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'rate(coap_request_duration_seconds_count{job="$Instance"}[1m]) * 60'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"Sum COAP Calls per minute"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'go_memstats_alloc_bytes{job="$Instance"} + go_memstats_stack_inuse_bytes{job="$Instance"}'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsx)(e.td,{children:"Memory Usage: Heap + Stack"})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'go_memstats_sys_bytes{job="$Instance"}'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsxs)(e.td,{children:["Memory Usage",":System"," Memory"]})]}),(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:(0,r.jsx)(e.code,{children:'go_memstats_alloc_bytes{job="$Instance"}'})}),(0,r.jsx)(e.td,{children:"Graph"}),(0,r.jsxs)(e.td,{children:["Memory Usage",":Heap"]})]})]})]})]})}function h(s={}){const{wrapper:e}={...(0,n.R)(),...s.components};return e?(0,r.jsx)(e,{...s,children:(0,r.jsx)(l,{...s})}):l(s)}},8453:(s,e,t)=>{t.d(e,{R:()=>i,x:()=>c});var r=t(6540);const n={},d=r.createContext(n);function i(s){const e=r.useContext(d);return r.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function c(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(n):s.components||n:i(s.components),r.createElement(d.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/d89bbf77.7b473833.js b/assets/js/d89bbf77.7b473833.js new file mode 100644 index 00000000..372e3587 --- /dev/null +++ b/assets/js/d89bbf77.7b473833.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3908],{5995:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var r=s(4848),n=s(8453);const o={sidebar_position:1},i="Wired M-BUS Gateways",a={id:"products/sensor-gateways/wired-mbus-g1/index",title:"Wired M-BUS Gateways",description:"This new documentation center is currently work in progress",source:"@site/docs/products/sensor-gateways/wired-mbus-g1/index.md",sourceDirName:"products/sensor-gateways/wired-mbus-g1",slug:"/products/sensor-gateways/wired-mbus-g1/",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wired-mbus-g1/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"LoRaWAN Bridge V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/"},next:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/"}},d={},c=[];function u(e){const t={admonition:"admonition",h1:"h1",p:"p",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"wired-m-bus-gateways",children:"Wired M-BUS Gateways"}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"This new documentation center is currently work in progress"})})]})}function p(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>a});var r=s(6540);const n={},o=r.createContext(n);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d89bbf77.ab4698f3.js b/assets/js/d89bbf77.ab4698f3.js deleted file mode 100644 index 1066a979..00000000 --- a/assets/js/d89bbf77.ab4698f3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3908],{5995:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var r=s(4848),n=s(8453);const o={sidebar_position:1},i="Wired M-BUS Gateways",a={id:"products/sensor-gateways/wired-mbus-g1/index",title:"Wired M-BUS Gateways",description:"This new documentation center is currently work in progress",source:"@site/docs/products/sensor-gateways/wired-mbus-g1/index.md",sourceDirName:"products/sensor-gateways/wired-mbus-g1",slug:"/products/sensor-gateways/wired-mbus-g1/",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wired-mbus-g1/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"LoRaWAN Bridge V2",permalink:"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/"},next:{title:"Operation Manual",permalink:"/iot/products/sensor-gateways/wired-mbus-g1/manual/"}},d={},c=[];function u(e){const t={admonition:"admonition",h1:"h1",p:"p",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"wired-m-bus-gateways",children:"Wired M-BUS Gateways"}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"This new documentation center is currently work in progress"})})]})}function p(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>a});var r=s(6540);const n={},o=r.createContext(n);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d993ba02.2751513f.js b/assets/js/d993ba02.2751513f.js new file mode 100644 index 00000000..5b937d6f --- /dev/null +++ b/assets/js/d993ba02.2751513f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7795],{9983:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=n(4848),r=n(8453);const a={sidebar_position:1},i="Description",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Description",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc"},next:{title:"Gateway DinRail",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.admonition,{type:"warning",children:(0,t.jsx)(s.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(s.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(s.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(s.p,{children:["Get started by ",(0,t.jsx)(s.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Or ",(0,t.jsx)(s.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(s.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(s.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(s.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(s.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(s.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(s.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(s.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Open ",(0,t.jsx)(s.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(s.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>o});var t=n(6540);const r={},a=t.createContext(r);function i(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d993ba02.b10897ef.js b/assets/js/d993ba02.b10897ef.js deleted file mode 100644 index 3352fae1..00000000 --- a/assets/js/d993ba02.b10897ef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7795],{9983:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=n(4848),r=n(8453);const a={sidebar_position:1},i="Description",o={id:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index",title:"index",description:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4.",source:"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index.md",sourceDirName:"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3",slug:"/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"productsSidebar",previous:{title:"Description",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc"},next:{title:"Gateway DinRail",permalink:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/"}},d={},l=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.admonition,{type:"warning",children:(0,t.jsx)(s.p,{children:"This product has been discontinued and functionally replaced by the wMBUS gateway V3 / V4."})}),"\n",(0,t.jsx)(s.h1,{id:"description",children:"Description"}),"\n",(0,t.jsx)(s.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(s.p,{children:["Get started by ",(0,t.jsx)(s.strong,{children:"creating a new site"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Or ",(0,t.jsx)(s.strong,{children:"try Docusaurus immediately"})," with ",(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,t.jsxs)(s.p,{children:["Generate a new Docusaurus site using the ",(0,t.jsx)(s.strong,{children:"classic template"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,t.jsx)(s.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,t.jsx)(s.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,t.jsx)(s.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,t.jsx)(s.p,{children:"Run the development server:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,t.jsx)(s.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Open ",(0,t.jsx)(s.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,t.jsx)(s.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>o});var t=n(6540);const r={},a=t.createContext(r);function i(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dcd0b923.04b91ec9.js b/assets/js/dcd0b923.04b91ec9.js deleted file mode 100644 index d0d1d09b..00000000 --- a/assets/js/dcd0b923.04b91ec9.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[474],{9208:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png 1600w,"+t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png 1802w",images:[{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",width:1600,height:1323},{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png",width:1802,height:1490}],src:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",toString:function(){return t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png"},placeholder:void 0,width:1600,height:1323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVR4nAFIAbf+ALi4sn+zq6H/sKCU+7esn//At6X/wLSg/7qtmP6onYv/k4Z3+Ma4oiQAzczKnJ6wov9XgGj8g5J4/4OOfP9PY0r/UV9J/mlzY/+QjX3/sZ6MRQDTzMWxj7Ce/wdyQvxdkHr/bYyC/zRWO/8VPin/Rm9t/ZGXkf+xoIhWAMzS2bKmwrr/BWEw/EdyZf9EVzv/c3ZY/2qCiv9denj9kaaw/6SkpHMA0cfDs5W1mP9TiGj8d3Jv/2dpWP9SYk7/JlRC/0RjV/yRnqH/qKyysADPxLezl6qL/3mPjPqim5r9srm1/am+uv0iYU39SE9J+oaJg/+jqrJnAOHg27aGk3r/eIuJ/Jqksv+WrLv/mcXV/yFjT/80RkT8naSi/7/ExGkA3NjShayuos2ChoXBcXF4w2xwesNfc3vCVmthwm50aMCho6DMwMDAThY6x3U9c17CAAAAAElFTkSuQmCC"}},9147:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/HYB-DINRAIL-WMBUS-full.111673e.1000.png 1000w",images:[{path:t.p+"assets/images/ideal-img/HYB-DINRAIL-WMBUS-full.111673e.1000.png",width:1e3,height:1e3}],src:t.p+"assets/images/ideal-img/HYB-DINRAIL-WMBUS-full.111673e.1000.png",toString:function(){return t.p+"assets/images/ideal-img/HYB-DINRAIL-WMBUS-full.111673e.1000.png"},placeholder:void 0,width:1e3,height:1e3},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsTAAALEwEAmpwYAAABTklEQVR4nGNgYGBgYmBgYBARETGUkJDTArHr6+vBYiigvt6eBUTz8AjaCAsLm0JFWRgY/jMyMDCAMByAdUtKyto42Nnk1dYW5wTE1tswMLjwo5hYU1MUkJYcu9Dby+NhUmL0v+ry3P+ZKZEP/P190hkYGORAljEwMLAxTJzQdcjT2+m/iZnh387O7n9Xr1z+U1+W+z8pOuhLWkpsGxcXvzEDA4MKw5oVS6fkl+f9l9AQ/m1iYvZ/zdJF/6dP7v0bHxP6v7e7+fOSJXPkwVbPmTNNZ8HCuR88Qtz/Kyop/EtNjP3f0dbwZ9asKf8nT+o7gOLOVcsXV8+fO+N/SXHun+6u1n+9fR1furvb1k3p7zcAyf//Dw4BBoYzT59yTZs64WxWVuqfDevX/N+yZeNSiAKk8IQFbktLlUl2dprJhAkT8svLyzPBNq0KZYYpBABfIH7PhsM8gwAAAABJRU5ErkJggg=="}},9716:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png 300w",images:[{path:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",width:300,height:141}],src:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",toString:function(){return t.p+"assets/images/ideal-img/labelv3.0e38395.300.png"},placeholder:void 0,width:300,height:141},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsUlEQVR4nB3MTQqCQABAYQ8fdIWgCGsXQd2gbYsgNUrzDytnJHWySY0Kghe2fPD4jM+n5Pm8Udc5batompL7PeP7bZnPp0zMAavVEkOpjMtFkCQJUmYIIUlTgdYPhsMRvV6fxWKGcT4HRFFIEBzxPBfHsSiKTm8Yj0eYpollrbsxRmYFm82Ww+GI70fE8Qmta2x7h+t2kIfx0CFVlZDnPmURolRMmu7//X5dqaoTUlj8AJXlsPmMwg3sAAAAAElFTkSuQmCC"}},9446:(e,n,t)=>{"use strict";t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=t(4848),s=t(8453);const o={sidebar_position:3,displayed_sidebar:"productsSidebar",title:"wM-Bus GW (230V)"},r="Wireless M-Bus Gateway (230V)",a={id:"products/metering-gateways/wireless-mbus-gateway-dinrail-230V",title:"wM-Bus GW (230V)",description:"Wireless M-Bus Gateway (230V){"use strict";t.d(n,{R:()=>r,x:()=>a});var i=t(6540);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dcd0b923.213a8561.js b/assets/js/dcd0b923.213a8561.js new file mode 100644 index 00000000..f698fb4b --- /dev/null +++ b/assets/js/dcd0b923.213a8561.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[474],{9208:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png 1600w,"+t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png 1802w",images:[{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",width:1600,height:1323},{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png",width:1802,height:1490}],src:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",toString:function(){return t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png"},placeholder:void 0,width:1600,height:1323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVR4nAFIAbf+ALi4sn+zq6H/sKCU+7esn//At6X/wLSg/7qtmP6onYv/k4Z3+Ma4oiQAzczKnJ6wov9XgGj8g5J4/4OOfP9PY0r/UV9J/mlzY/+QjX3/sZ6MRQDTzMWxj7Ce/wdyQvxdkHr/bYyC/zRWO/8VPin/Rm9t/ZGXkf+xoIhWAMzS2bKmwrr/BWEw/EdyZf9EVzv/c3ZY/2qCiv9denj9kaaw/6SkpHMA0cfDs5W1mP9TiGj8d3Jv/2dpWP9SYk7/JlRC/0RjV/yRnqH/qKyysADPxLezl6qL/3mPjPqim5r9srm1/am+uv0iYU39SE9J+oaJg/+jqrJnAOHg27aGk3r/eIuJ/Jqksv+WrLv/mcXV/yFjT/80RkT8naSi/7/ExGkA3NjShayuos2ChoXBcXF4w2xwesNfc3vCVmthwm50aMCho6DMwMDAThY6x3U9c17CAAAAAElFTkSuQmCC"}},9147:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/HYB-DINRAIL-WMBUS-full.111673e.1000.png 1000w",images:[{path:t.p+"assets/images/ideal-img/HYB-DINRAIL-WMBUS-full.111673e.1000.png",width:1e3,height:1e3}],src:t.p+"assets/images/ideal-img/HYB-DINRAIL-WMBUS-full.111673e.1000.png",toString:function(){return t.p+"assets/images/ideal-img/HYB-DINRAIL-WMBUS-full.111673e.1000.png"},placeholder:void 0,width:1e3,height:1e3},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsTAAALEwEAmpwYAAABTklEQVR4nGNgYGBgYmBgYBARETGUkJDTArHr6+vBYiigvt6eBUTz8AjaCAsLm0JFWRgY/jMyMDCAMByAdUtKyto42Nnk1dYW5wTE1tswMLjwo5hYU1MUkJYcu9Dby+NhUmL0v+ry3P+ZKZEP/P190hkYGORAljEwMLAxTJzQdcjT2+m/iZnh387O7n9Xr1z+U1+W+z8pOuhLWkpsGxcXvzEDA4MKw5oVS6fkl+f9l9AQ/m1iYvZ/zdJF/6dP7v0bHxP6v7e7+fOSJXPkwVbPmTNNZ8HCuR88Qtz/Kyop/EtNjP3f0dbwZ9asKf8nT+o7gOLOVcsXV8+fO+N/SXHun+6u1n+9fR1furvb1k3p7zcAyf//Dw4BBoYzT59yTZs64WxWVuqfDevX/N+yZeNSiAKk8IQFbktLlUl2dprJhAkT8svLyzPBNq0KZYYpBABfIH7PhsM8gwAAAABJRU5ErkJggg=="}},9716:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png 300w",images:[{path:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",width:300,height:141}],src:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",toString:function(){return t.p+"assets/images/ideal-img/labelv3.0e38395.300.png"},placeholder:void 0,width:300,height:141},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsUlEQVR4nB3MTQqCQABAYQ8fdIWgCGsXQd2gbYsgNUrzDytnJHWySY0Kghe2fPD4jM+n5Pm8Udc5batompL7PeP7bZnPp0zMAavVEkOpjMtFkCQJUmYIIUlTgdYPhsMRvV6fxWKGcT4HRFFIEBzxPBfHsSiKTm8Yj0eYpollrbsxRmYFm82Ww+GI70fE8Qmta2x7h+t2kIfx0CFVlZDnPmURolRMmu7//X5dqaoTUlj8AJXlsPmMwg3sAAAAAElFTkSuQmCC"}},9446:(e,n,t)=>{"use strict";t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=t(4848),s=t(8453);const o={sidebar_position:3,title:"wM-Bus GW (230V)"},r="Wireless M-Bus Gateway (230V)",a={id:"products/metering-gateways/wireless-mbus-gateway-dinrail-230V",title:"wM-Bus GW (230V)",description:"Wireless M-Bus Gateway (230V){"use strict";t.d(n,{R:()=>r,x:()=>a});var i=t(6540);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e091b4aa.21fb5815.js b/assets/js/e091b4aa.21fb5815.js new file mode 100644 index 00000000..45e9c32f --- /dev/null +++ b/assets/js/e091b4aa.21fb5815.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[482],{6453:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>a});var s=t(4848),r=t(8453);const o={sidebar_position:1},d="Modbus",i={id:"knowledge-base/modbus",title:"Modbus",description:"Some notable things in a block quote!",source:"@site/docs/knowledge-base/modbus.md",sourceDirName:"knowledge-base",slug:"/knowledge-base/modbus",permalink:"/iot/knowledge-base/modbus",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/knowledge-base/modbus.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Wireless M-BUS",permalink:"/iot/knowledge-base/wireless-mbus"}},l={},a=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"modbus",children:"Modbus"}),"\n",(0,s.jsx)("div",{className:"note",children:(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Some notable things in a block quote!"}),"\n"]})}),"\n",(0,s.jsx)("div",{children:(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:"Person 1"}),(0,s.jsx)("th",{children:"Person 2"}),(0,s.jsx)("th",{children:"Person 3"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"Emil"}),(0,s.jsx)("td",{children:"Tobias"}),(0,s.jsx)("td",{children:"Linus"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"16"}),(0,s.jsx)("td",{children:"14"}),(0,s.jsx)("td",{children:"10"})]})]})}),"\n",(0,s.jsx)(n.h1,{id:"tutorial-intro",children:"Tutorial Intro"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Foo"}),(0,s.jsx)(n.th,{children:"Bar"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"A"}),(0,s.jsx)(n.td,{children:"B"})]})})]}),"\n",(0,s.jsxs)(n.p,{children:["Let's discover ",(0,s.jsx)(n.strong,{children:"Docusaurus in less than 5 minutes"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,s.jsxs)(n.p,{children:["Get started by ",(0,s.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Or ",(0,s.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,s.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,s.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,s.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,s.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,s.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,s.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Open ",(0,s.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,s.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>d,x:()=>i});var s=t(6540);const r={},o=s.createContext(r);function d(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e091b4aa.6b07b387.js b/assets/js/e091b4aa.6b07b387.js deleted file mode 100644 index 45f1adeb..00000000 --- a/assets/js/e091b4aa.6b07b387.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[482],{6453:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>a});var s=t(4848),r=t(8453);const o={sidebar_position:1},d="Modbus",i={id:"knowledge-base/modbus",title:"Modbus",description:"Some notable things in a block quote!",source:"@site/docs/knowledge-base/modbus.md",sourceDirName:"knowledge-base",slug:"/knowledge-base/modbus",permalink:"/iot/knowledge-base/modbus",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/knowledge-base/modbus.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"knowledgeBaseSidebar",previous:{title:"Wireless M-BUS",permalink:"/iot/knowledge-base/wireless-mbus"}},l={},a=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"modbus",children:"Modbus"}),"\n",(0,s.jsx)("div",{className:"note",children:(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Some notable things in a block quote!"}),"\n"]})}),"\n",(0,s.jsx)("div",{children:(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:"Person 1"}),(0,s.jsx)("th",{children:"Person 2"}),(0,s.jsx)("th",{children:"Person 3"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"Emil"}),(0,s.jsx)("td",{children:"Tobias"}),(0,s.jsx)("td",{children:"Linus"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"16"}),(0,s.jsx)("td",{children:"14"}),(0,s.jsx)("td",{children:"10"})]})]})}),"\n",(0,s.jsx)(n.h1,{id:"tutorial-intro",children:"Tutorial Intro"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Foo"}),(0,s.jsx)(n.th,{children:"Bar"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"A"}),(0,s.jsx)(n.td,{children:"B"})]})})]}),"\n",(0,s.jsxs)(n.p,{children:["Let's discover ",(0,s.jsx)(n.strong,{children:"Docusaurus in less than 5 minutes"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,s.jsxs)(n.p,{children:["Get started by ",(0,s.jsx)(n.strong,{children:"creating a new site"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Or ",(0,s.jsx)(n.strong,{children:"try Docusaurus immediately"})," with ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,s.jsxs)(n.p,{children:["Generate a new Docusaurus site using the ",(0,s.jsx)(n.strong,{children:"classic template"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,s.jsx)(n.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,s.jsx)(n.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,s.jsx)(n.p,{children:"Run the development server:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,s.jsx)(n.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Open ",(0,s.jsx)(n.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,s.jsx)(n.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>d,x:()=>i});var s=t(6540);const r={},o=s.createContext(r);function d(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e68c242a.4cb44ca8.js b/assets/js/e68c242a.4cb44ca8.js new file mode 100644 index 00000000..2a53ed61 --- /dev/null +++ b/assets/js/e68c242a.4cb44ca8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[4888],{8195:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var r=n(4848),s=n(8453);const i={sidebar_position:1},o="Lobaro Direct+",a={id:"platform/license/direct+/index",title:"Lobaro Direct+",description:"test",source:"@site/docs/platform/license/direct+/index.md",sourceDirName:"platform/license/direct+",slug:"/platform/license/direct+/",permalink:"/iot/platform/license/direct+/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/license/direct+/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"allDocSidebar",previous:{title:"Hosting & Licensing",permalink:"/iot/platform/license/"},next:{title:"Dragino",permalink:"/iot/platform/3rd-party/dragino"}},l={},d=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"lobaro-direct",children:"Lobaro Direct+"}),"\n",(0,r.jsx)(t.p,{children:"test"}),"\n",(0,r.jsx)(t.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,r.jsxs)(t.p,{children:["Get started by ",(0,r.jsx)(t.strong,{children:"creating a new site"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["Or ",(0,r.jsx)(t.strong,{children:"try Docusaurus immediately"})," with ",(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,r.jsxs)(t.p,{children:["Generate a new Docusaurus site using the ",(0,r.jsx)(t.strong,{children:"classic template"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,r.jsx)(t.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,r.jsx)(t.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,r.jsx)(t.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,r.jsx)(t.p,{children:"Run the development server:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,r.jsx)(t.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["Open ",(0,r.jsx)(t.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,r.jsx)(t.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var r=n(6540);const s={},i=r.createContext(s);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e68c242a.c77c776b.js b/assets/js/e68c242a.c77c776b.js deleted file mode 100644 index 5ae0efb8..00000000 --- a/assets/js/e68c242a.c77c776b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[4888],{8195:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var r=n(4848),s=n(8453);const i={sidebar_position:1},o="Lobaro Direct+",a={id:"platform/license/direct+/index",title:"Lobaro Direct+",description:"test",source:"@site/docs/platform/license/direct+/index.md",sourceDirName:"platform/license/direct+",slug:"/platform/license/direct+/",permalink:"/iot/platform/license/direct+/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/license/direct+/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"cloudSidebar",previous:{title:"Hosting & Licensing",permalink:"/iot/platform/license/"},next:{title:"Dragino",permalink:"/iot/platform/3rd-party/dragino"}},l={},d=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"lobaro-direct",children:"Lobaro Direct+"}),"\n",(0,r.jsx)(t.p,{children:"test"}),"\n",(0,r.jsx)(t.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,r.jsxs)(t.p,{children:["Get started by ",(0,r.jsx)(t.strong,{children:"creating a new site"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["Or ",(0,r.jsx)(t.strong,{children:"try Docusaurus immediately"})," with ",(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,r.jsxs)(t.p,{children:["Generate a new Docusaurus site using the ",(0,r.jsx)(t.strong,{children:"classic template"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,r.jsx)(t.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,r.jsx)(t.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,r.jsx)(t.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,r.jsx)(t.p,{children:"Run the development server:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,r.jsx)(t.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["Open ",(0,r.jsx)(t.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,r.jsx)(t.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var r=n(6540);const s={},i=r.createContext(s);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/eb2b5977.1398db65.js b/assets/js/eb2b5977.1398db65.js deleted file mode 100644 index 0859978c..00000000 --- a/assets/js/eb2b5977.1398db65.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8822],{7439:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>x,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var i=n(4848),r=n(8453);const s={sidebar_position:4,displayed_sidebar:"configurationSidebar",title:"OBIS-Code Configuration"},l="OBIS-Code Configuration",o={id:"configuration/obis-code-configuration",title:"OBIS-Code Configuration",description:"Object identification system (OBIS) Codes are used to identify the different readings of a smart meter transferred in",source:"@site/docs/configuration/obis-code-configuration.md",sourceDirName:"configuration",slug:"/configuration/obis-code-configuration",permalink:"/iot/configuration/obis-code-configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/obis-code-configuration.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,displayed_sidebar:"configurationSidebar",title:"OBIS-Code Configuration"},sidebar:"configurationSidebar",previous:{title:"LTE Network Configuration",permalink:"/iot/configuration/lte-network-configuration"}},d={},c=[{value:"Structure",id:"structure",level:2},{value:"Examples",id:"examples",level:2}];function a(e){const t={br:"br",h1:"h1",h2:"h2",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"obis-code-configuration",children:"OBIS-Code Configuration"}),"\n",(0,i.jsx)(t.p,{children:"Object identification system (OBIS) Codes are used to identify the different readings of a smart meter transferred in\nSmart Message Language (SML), which is a commonly used protocol on D0 optoelectronic interfaces. They are described in\nthe international standard IEC 62056-61."}),"\n",(0,i.jsx)(t.h2,{id:"structure",children:"Structure"}),"\n",(0,i.jsx)(t.p,{children:"Every code consists of 6 separated group sub-identifiers. In general some of these identifiers may be omitted but our\nproducts require the full code."}),"\n",(0,i.jsxs)(t.p,{children:["The basic pattern is:",(0,i.jsx)(t.br,{}),"\n",(0,i.jsxs)(t.strong,{children:["A-B",":C",".D.E*F"]})]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"center"},children:"Group"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Examples"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"A"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Medium"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"1 = electricity, 8 = water"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"B"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Channel"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"0 = no channel available"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"C"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Physical Unit, depends on A"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"power, current, voltage..."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"D"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Measurement Type, depends on A und C"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"maximum, current value, energy..."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"E"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Tariff"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"0 = total, 1 = tariff 1, 2 = tariff 2 ..."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"F"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Separate Values defined by A-E"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"billing periods, 255 if not used"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"examples",children:"Examples"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Obis Code"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Meaning"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"1-0:1.8.0*255"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Positive active energy (A+) total [kWh]"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"1-0:3.8.1*255"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Positive reactive energy (Q+) in tariff T1 [kvarh]"})]})]})]})]})}function x(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>o});var i=n(6540);const r={},s=i.createContext(r);function l(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/eb2b5977.358af9ce.js b/assets/js/eb2b5977.358af9ce.js new file mode 100644 index 00000000..123dae51 --- /dev/null +++ b/assets/js/eb2b5977.358af9ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8822],{7439:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>x,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var i=n(4848),r=n(8453);const s={sidebar_position:4,title:"OBIS-Code Configuration"},l="OBIS-Code Configuration",o={id:"configuration/obis-code-configuration",title:"OBIS-Code Configuration",description:"Object identification system (OBIS) Codes are used to identify the different readings of a smart meter transferred in",source:"@site/docs/configuration/obis-code-configuration.md",sourceDirName:"configuration",slug:"/configuration/obis-code-configuration",permalink:"/iot/configuration/obis-code-configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/obis-code-configuration.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,title:"OBIS-Code Configuration"},sidebar:"allDocSidebar",previous:{title:"LTE Network Configuration",permalink:"/iot/configuration/lte-network-configuration"},next:{title:"Overview",permalink:"/iot/platform/"}},d={},c=[{value:"Structure",id:"structure",level:2},{value:"Examples",id:"examples",level:2}];function a(e){const t={br:"br",h1:"h1",h2:"h2",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"obis-code-configuration",children:"OBIS-Code Configuration"}),"\n",(0,i.jsx)(t.p,{children:"Object identification system (OBIS) Codes are used to identify the different readings of a smart meter transferred in\nSmart Message Language (SML), which is a commonly used protocol on D0 optoelectronic interfaces. They are described in\nthe international standard IEC 62056-61."}),"\n",(0,i.jsx)(t.h2,{id:"structure",children:"Structure"}),"\n",(0,i.jsx)(t.p,{children:"Every code consists of 6 separated group sub-identifiers. In general some of these identifiers may be omitted but our\nproducts require the full code."}),"\n",(0,i.jsxs)(t.p,{children:["The basic pattern is:",(0,i.jsx)(t.br,{}),"\n",(0,i.jsxs)(t.strong,{children:["A-B",":C",".D.E*F"]})]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"center"},children:"Group"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Examples"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"A"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Medium"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"1 = electricity, 8 = water"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"B"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Channel"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"0 = no channel available"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"C"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Physical Unit, depends on A"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"power, current, voltage..."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"D"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Measurement Type, depends on A und C"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"maximum, current value, energy..."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"E"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Tariff"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"0 = total, 1 = tariff 1, 2 = tariff 2 ..."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"center"},children:(0,i.jsx)(t.strong,{children:"F"})}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Separate Values defined by A-E"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"billing periods, 255 if not used"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"examples",children:"Examples"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Obis Code"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Meaning"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"1-0:1.8.0*255"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Positive active energy (A+) total [kWh]"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"1-0:3.8.1*255"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Positive reactive energy (Q+) in tariff T1 [kvarh]"})]})]})]})]})}function x(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>o});var i=n(6540);const r={},s=i.createContext(r);function l(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f6d78023.37c81da6.js b/assets/js/f6d78023.37c81da6.js deleted file mode 100644 index 8e14056c..00000000 --- a/assets/js/f6d78023.37c81da6.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[4545],{9536:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.c00b17c.1600.png 1600w,"+i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.f7e3cdc.2432.png 2432w,"+i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.205e05f.3152.png 3152w",images:[{path:i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.c00b17c.1600.png",width:1600,height:969},{path:i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.f7e3cdc.2432.png",width:2432,height:1472},{path:i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.205e05f.3152.png",width:3152,height:1908}],src:i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.c00b17c.1600.png",toString:function(){return i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.c00b17c.1600.png"},placeholder:void 0,width:1600,height:969},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAqElEQVR4nEWP0YqDMBBF8/+/tijoU3xoE3Ylbl1DUpNoldCzdKD04TAMc+/cGfX3/cPt90YuRSilsG3vupHWjL9YlPtqeew7PkTWvIl43x8cx/GhFNRRqzTWGK7XC3rQWGuZpol5nokxknJG8XyK0BhD3/c0TcMwDIzjyLIspJTkDAVwnidaa7quo21b4WV6Gbz3ZNkI1FqZnJM455wMYwiEEFjvd3nqH8gU4VJFWyncAAAAAElFTkSuQmCC"}},3046:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.92f33a7.1600.png 1600w,"+i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.f0d41ff.2202.png 2202w",images:[{path:i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.92f33a7.1600.png",width:1600,height:1068},{path:i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.f0d41ff.2202.png",width:2202,height:1470}],src:i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.92f33a7.1600.png",toString:function(){return i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.92f33a7.1600.png"},placeholder:void 0,width:1600,height:1068},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAl0lEQVR4nFWO2woDIQxE/f/vbCnFddU1JvHCTklgHxoIOJmTieETM95HxVkqWAeIFTIWdO6/Dq/vgXQWXNRxNUJnAYtC9OnhOuRSsdYCUYeqwkpVfHbfN4gIIoJwxIjeO5jZB3tv13NOB1NKGGMgtNbcfAwrWzDTdCnF00Ot1UEzbclMS7Rv/CXGGB2y0zlnfxv4JBpo1347Cg/vyVyimgAAAABJRU5ErkJggg=="}},5117:(e,o,i)=>{"use strict";i.r(o),i.d(o,{assets:()=>l,contentTitle:()=>r,default:()=>g,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var n=i(4848),t=i(8453);const a={sidebar_position:0,displayed_sidebar:"configurationSidebar",title:"Overview"},r="Device Configuration",s={id:"configuration/index",title:"Overview",description:"---",source:"@site/docs/configuration/index.md",sourceDirName:"configuration",slug:"/configuration/",permalink:"/iot/configuration/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,displayed_sidebar:"configurationSidebar",title:"Overview"},sidebar:"configurationSidebar",next:{title:"Lobaro USB Config Adapter",permalink:"/iot/configuration/usb-config-adapter"}},l={},c=[{value:"Different ways to configure",id:"different-ways-to-configure",level:2},{value:"Locally",id:"locally",level:3},{value:"Remotely",id:"remotely",level:3}];function d(e){const o={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",hr:"hr",p:"p",strong:"strong",...(0,t.R)(),...e.components},{Image:a}=o;return a||function(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"device-configuration",children:"Device Configuration"}),"\n",(0,n.jsx)(o.hr,{}),"\n",(0,n.jsx)(o.p,{children:"The device configuration allows a wide range and flexible way of internal settings adjustments for Lobaro hardware.\nThis chapter generally describes our tools, common configuration parameters and workflows that are used in the same way\nfor many\nLobaro devices to adjust the used configuration."}),"\n",(0,n.jsx)(o.admonition,{title:"This is a general doc",type:"info",children:(0,n.jsxs)(o.p,{children:["Device and firmware ",(0,n.jsx)(o.strong,{children:"specific"})," parameters are explained in the respective product documentation."]})}),"\n",(0,n.jsx)(o.h2,{id:"different-ways-to-configure",children:"Different ways to configure"}),"\n",(0,n.jsx)(o.p,{children:"There are two ways of configuring our devices in existence. On the one hand locally where you need physical access to a\ndevice and on the other hand remotely over the air. For larger rollouts only remote updates of configuration showed to\nbe a feasible way to go."}),"\n",(0,n.jsx)(o.h3,{id:"locally",children:"Locally"}),"\n",(0,n.jsxs)(o.p,{children:["Any Lobaro device configuration can be set and read out locally via a PC with the ",(0,n.jsx)(o.a,{href:"./usb-config-adapter",children:"Lobaro configuration USB\nadapter"})," and the ",(0,n.jsx)(o.a,{href:"/iot/configuration/lobaro-config-tool",children:"Lobaro Maintenance Tool"}),"."]}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool",img:i(9536),style:{width:"60%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsxs)(o.p,{children:["Some network related parameters, such as the APN of the mobile cellular network provider, ",(0,n.jsx)(o.strong,{children:"must"})," usually\nfirst be configured correctly locally before the device can get online for the first time."]}),"\n",(0,n.jsx)(o.h3,{id:"remotely",children:"Remotely"}),"\n",(0,n.jsx)(o.p,{children:"Once the device has connectivity the configuration can be changed remotely over the air using various methods, e.g. the Lobaro IoT Platform, MQTT or any LoRaWAN network server\nusing initiated special downlink communication:"}),"\n",(0,n.jsx)(a,{alt:"Lobaro Platform Configuration Tab",img:i(3046),style:{width:"60%",paddingTop:"10px",paddingBottom:"20px"}}),"\n",(0,n.jsx)(o.admonition,{title:"Bigger Rollouts",type:"info",children:(0,n.jsx)(o.p,{children:"For larger orders, a customer specific configuration agreed upon can\nalso be installed by Lobaro during production provisioning. This way manual reconfiguration from the firmware defaults\ncan be avoided before installing the devices in the field and over the air configuration will work out of the box."})})]})}function g(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,o,i)=>{"use strict";i.d(o,{R:()=>r,x:()=>s});var n=i(6540);const t={},a=n.createContext(t);function r(e){const o=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function s(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f6d78023.e28b60fa.js b/assets/js/f6d78023.e28b60fa.js new file mode 100644 index 00000000..66368f18 --- /dev/null +++ b/assets/js/f6d78023.e28b60fa.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[4545],{9536:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.c00b17c.1600.png 1600w,"+i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.f7e3cdc.2432.png 2432w,"+i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.205e05f.3152.png 3152w",images:[{path:i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.c00b17c.1600.png",width:1600,height:969},{path:i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.f7e3cdc.2432.png",width:2432,height:1472},{path:i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.205e05f.3152.png",width:3152,height:1908}],src:i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.c00b17c.1600.png",toString:function(){return i.p+"assets/images/ideal-img/Lobaro-Config-in-Log.c00b17c.1600.png"},placeholder:void 0,width:1600,height:969},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAqElEQVR4nEWP0YqDMBBF8/+/tijoU3xoE3Ylbl1DUpNoldCzdKD04TAMc+/cGfX3/cPt90YuRSilsG3vupHWjL9YlPtqeew7PkTWvIl43x8cx/GhFNRRqzTWGK7XC3rQWGuZpol5nokxknJG8XyK0BhD3/c0TcMwDIzjyLIspJTkDAVwnidaa7quo21b4WV6Gbz3ZNkI1FqZnJM455wMYwiEEFjvd3nqH8gU4VJFWyncAAAAAElFTkSuQmCC"}},3046:(e,o,i)=>{e.exports={src:{srcSet:i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.92f33a7.1600.png 1600w,"+i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.f0d41ff.2202.png 2202w",images:[{path:i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.92f33a7.1600.png",width:1600,height:1068},{path:i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.f0d41ff.2202.png",width:2202,height:1470}],src:i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.92f33a7.1600.png",toString:function(){return i.p+"assets/images/ideal-img/configuration-example-lobaro-platform.92f33a7.1600.png"},placeholder:void 0,width:1600,height:1068},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAl0lEQVR4nFWO2woDIQxE/f/vbCnFddU1JvHCTklgHxoIOJmTieETM95HxVkqWAeIFTIWdO6/Dq/vgXQWXNRxNUJnAYtC9OnhOuRSsdYCUYeqwkpVfHbfN4gIIoJwxIjeO5jZB3tv13NOB1NKGGMgtNbcfAwrWzDTdCnF00Ot1UEzbclMS7Rv/CXGGB2y0zlnfxv4JBpo1347Cg/vyVyimgAAAABJRU5ErkJggg=="}},5117:(e,o,i)=>{"use strict";i.r(o),i.d(o,{assets:()=>l,contentTitle:()=>r,default:()=>g,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var n=i(4848),t=i(8453);const a={sidebar_position:0,title:"Overview"},r="Device Configuration",s={id:"configuration/index",title:"Overview",description:"---",source:"@site/docs/configuration/index.md",sourceDirName:"configuration",slug:"/configuration/",permalink:"/iot/configuration/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/configuration/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,title:"Overview"},sidebar:"allDocSidebar",previous:{title:"Hardware Addon Modules",permalink:"/iot/components/addon-modules/"},next:{title:"Lobaro USB Config Adapter",permalink:"/iot/configuration/usb-config-adapter"}},l={},c=[{value:"Different ways to configure",id:"different-ways-to-configure",level:2},{value:"Locally",id:"locally",level:3},{value:"Remotely",id:"remotely",level:3}];function d(e){const o={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",hr:"hr",p:"p",strong:"strong",...(0,t.R)(),...e.components},{Image:a}=o;return a||function(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Image",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"device-configuration",children:"Device Configuration"}),"\n",(0,n.jsx)(o.hr,{}),"\n",(0,n.jsx)(o.p,{children:"The device configuration allows a wide range and flexible way of internal settings adjustments for Lobaro hardware.\nThis chapter generally describes our tools, common configuration parameters and workflows that are used in the same way\nfor many\nLobaro devices to adjust the used configuration."}),"\n",(0,n.jsx)(o.admonition,{title:"This is a general doc",type:"info",children:(0,n.jsxs)(o.p,{children:["Device and firmware ",(0,n.jsx)(o.strong,{children:"specific"})," parameters are explained in the respective product documentation."]})}),"\n",(0,n.jsx)(o.h2,{id:"different-ways-to-configure",children:"Different ways to configure"}),"\n",(0,n.jsx)(o.p,{children:"There are two ways of configuring our devices in existence. On the one hand locally where you need physical access to a\ndevice and on the other hand remotely over the air. For larger rollouts only remote updates of configuration showed to\nbe a feasible way to go."}),"\n",(0,n.jsx)(o.h3,{id:"locally",children:"Locally"}),"\n",(0,n.jsxs)(o.p,{children:["Any Lobaro device configuration can be set and read out locally via a PC with the ",(0,n.jsx)(o.a,{href:"./usb-config-adapter",children:"Lobaro configuration USB\nadapter"})," and the ",(0,n.jsx)(o.a,{href:"/iot/configuration/lobaro-config-tool",children:"Lobaro Maintenance Tool"}),"."]}),"\n",(0,n.jsx)(a,{alt:"Lobaro Configuration Tool",img:i(9536),style:{width:"60%",paddingTop:"10px",paddingBottom:"10px"}}),"\n",(0,n.jsxs)(o.p,{children:["Some network related parameters, such as the APN of the mobile cellular network provider, ",(0,n.jsx)(o.strong,{children:"must"})," usually\nfirst be configured correctly locally before the device can get online for the first time."]}),"\n",(0,n.jsx)(o.h3,{id:"remotely",children:"Remotely"}),"\n",(0,n.jsx)(o.p,{children:"Once the device has connectivity the configuration can be changed remotely over the air using various methods, e.g. the Lobaro IoT Platform, MQTT or any LoRaWAN network server\nusing initiated special downlink communication:"}),"\n",(0,n.jsx)(a,{alt:"Lobaro Platform Configuration Tab",img:i(3046),style:{width:"60%",paddingTop:"10px",paddingBottom:"20px"}}),"\n",(0,n.jsx)(o.admonition,{title:"Bigger Rollouts",type:"info",children:(0,n.jsx)(o.p,{children:"For larger orders, a customer specific configuration agreed upon can\nalso be installed by Lobaro during production provisioning. This way manual reconfiguration from the firmware defaults\ncan be avoided before installing the devices in the field and over the air configuration will work out of the box."})})]})}function g(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,o,i)=>{"use strict";i.d(o,{R:()=>r,x:()=>s});var n=i(6540);const t={},a=n.createContext(t);function r(e){const o=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function s(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f74ba575.32ec6e25.js b/assets/js/f74ba575.32ec6e25.js new file mode 100644 index 00000000..24de78c2 --- /dev/null +++ b/assets/js/f74ba575.32ec6e25.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7250],{8633:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var o=r(4848),t=r(8453);const i={},s="Dragino",a={id:"platform/3rd-party/dragino",title:"Dragino",description:"The Lobaro Platform supports a range of third party IoT devices. This page provides a quick setup guide for these devices.",source:"@site/docs/platform/3rd-party/dragino.md",sourceDirName:"platform/3rd-party",slug:"/platform/3rd-party/dragino",permalink:"/iot/platform/3rd-party/dragino",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/3rd-party/dragino.md",tags:[],version:"current",frontMatter:{},sidebar:"allDocSidebar",previous:{title:"Lobaro Direct+",permalink:"/iot/platform/license/direct+/"},next:{title:"FAQ",permalink:"/iot/platform/faq"}},d={},l=[{value:"NB-IoT Sensor Node for Temperature & Humidity (NBSN95A-S31B)",id:"nb-iot-sensor-node-for-temperature--humidity-nbsn95a-s31b",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"dragino",children:"Dragino"}),"\n",(0,o.jsx)(n.p,{children:"The Lobaro Platform supports a range of third party IoT devices. This page provides a quick setup guide for these devices.\nFor further details please consult the manufacturers documentation."}),"\n",(0,o.jsx)(n.h3,{id:"nb-iot-sensor-node-for-temperature--humidity-nbsn95a-s31b",children:"NB-IoT Sensor Node for Temperature & Humidity (NBSN95A-S31B)"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"dragino-NBSN95.png",src:r(1517).A+"",width:"409",height:"324"})}),"\n",(0,o.jsx)(n.admonition,{title:"Resources",type:"info",children:(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"http://wiki.dragino.com/xwiki/bin/view/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/NBSN95_NBSN95A%20NB-IoT%20Sensor%20Node%20User%20Manual/",children:"Online Manual"})}),"\n"]})}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Insert your SIM Card"}),"\n",(0,o.jsxs)(n.li,{children:["Connect a configuration cable to issue the commands below","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Baud: 9600"}),"\n",(0,o.jsx)(n.li,{children:"Data bits: 8"}),"\n",(0,o.jsx)(n.li,{children:"Stop bits: 1"}),"\n",(0,o.jsx)(n.li,{children:"Parity: None"}),"\n",(0,o.jsx)(n.li,{children:"Flow Control: None"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"Enter the following password to access the device"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"12345678\n"})}),"\n",(0,o.jsx)(n.p,{children:"TCP Upload to Lobaro Platform"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"AT+PRO=4\nAT+SERVADDR=up.lobaro.com,5600\n"})}),"\n",(0,o.jsx)(n.p,{children:"Upload data as often as possible (for testing purpose)"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"AT+TR=180\nAT+TDC=60\nAT+NOUD=1\n"})})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},1517:(e,n,r)=>{r.d(n,{A:()=>o});const o=r.p+"assets/images/dragino-NBSN95-44fad67c1553dbe876a184f0334e73ce.png"},8453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>a});var o=r(6540);const t={},i=o.createContext(t);function s(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f74ba575.72fe51ee.js b/assets/js/f74ba575.72fe51ee.js deleted file mode 100644 index 87e704b5..00000000 --- a/assets/js/f74ba575.72fe51ee.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[7250],{8633:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var o=r(4848),t=r(8453);const i={},s="Dragino",a={id:"platform/3rd-party/dragino",title:"Dragino",description:"The Lobaro Platform supports a range of third party IoT devices. This page provides a quick setup guide for these devices.",source:"@site/docs/platform/3rd-party/dragino.md",sourceDirName:"platform/3rd-party",slug:"/platform/3rd-party/dragino",permalink:"/iot/platform/3rd-party/dragino",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/platform/3rd-party/dragino.md",tags:[],version:"current",frontMatter:{},sidebar:"cloudSidebar",previous:{title:"Lobaro Direct+",permalink:"/iot/platform/license/direct+/"},next:{title:"FAQ",permalink:"/iot/platform/faq"}},d={},l=[{value:"NB-IoT Sensor Node for Temperature & Humidity (NBSN95A-S31B)",id:"nb-iot-sensor-node-for-temperature--humidity-nbsn95a-s31b",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"dragino",children:"Dragino"}),"\n",(0,o.jsx)(n.p,{children:"The Lobaro Platform supports a range of third party IoT devices. This page provides a quick setup guide for these devices.\nFor further details please consult the manufacturers documentation."}),"\n",(0,o.jsx)(n.h3,{id:"nb-iot-sensor-node-for-temperature--humidity-nbsn95a-s31b",children:"NB-IoT Sensor Node for Temperature & Humidity (NBSN95A-S31B)"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"dragino-NBSN95.png",src:r(1517).A+"",width:"409",height:"324"})}),"\n",(0,o.jsx)(n.admonition,{title:"Resources",type:"info",children:(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"http://wiki.dragino.com/xwiki/bin/view/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/NBSN95_NBSN95A%20NB-IoT%20Sensor%20Node%20User%20Manual/",children:"Online Manual"})}),"\n"]})}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Insert your SIM Card"}),"\n",(0,o.jsxs)(n.li,{children:["Connect a configuration cable to issue the commands below","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Baud: 9600"}),"\n",(0,o.jsx)(n.li,{children:"Data bits: 8"}),"\n",(0,o.jsx)(n.li,{children:"Stop bits: 1"}),"\n",(0,o.jsx)(n.li,{children:"Parity: None"}),"\n",(0,o.jsx)(n.li,{children:"Flow Control: None"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"Enter the following password to access the device"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"12345678\n"})}),"\n",(0,o.jsx)(n.p,{children:"TCP Upload to Lobaro Platform"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"AT+PRO=4\nAT+SERVADDR=up.lobaro.com,5600\n"})}),"\n",(0,o.jsx)(n.p,{children:"Upload data as often as possible (for testing purpose)"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"AT+TR=180\nAT+TDC=60\nAT+NOUD=1\n"})})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},1517:(e,n,r)=>{r.d(n,{A:()=>o});const o=r.p+"assets/images/dragino-NBSN95-44fad67c1553dbe876a184f0334e73ce.png"},8453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>a});var o=r(6540);const t={},i=o.createContext(t);function s(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f88d53d7.24f5fa6f.js b/assets/js/f88d53d7.24f5fa6f.js new file mode 100644 index 00000000..0c261860 --- /dev/null +++ b/assets/js/f88d53d7.24f5fa6f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[9582],{7912:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>d,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>a});var t=n(4848),s=n(8453);const r={sidebar_position:0},d="Addon Modules Overview",i={id:"components/addon-modules/index",title:"Addon Modules Overview",description:"",source:"@site/docs/components/addon-modules/index.md",sourceDirName:"components/addon-modules",slug:"/components/addon-modules/",permalink:"/iot/components/addon-modules/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/addon-modules/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"allDocSidebar",previous:{title:"Spelsberg TG PC 1208-6-o",permalink:"/iot/components/enclosures/spelsberg_TG_PC_1208-6-o"},next:{title:"Overview",permalink:"/iot/configuration/"}},c={},a=[];function u(e){const o={h1:"h1",...(0,s.R)(),...e.components};return(0,t.jsx)(o.h1,{id:"addon-modules-overview",children:"Addon Modules Overview"})}function l(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},8453:(e,o,n)=>{n.d(o,{R:()=>d,x:()=>i});var t=n(6540);const s={},r=t.createContext(s);function d(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f88d53d7.c6647b73.js b/assets/js/f88d53d7.c6647b73.js deleted file mode 100644 index dbb2c5d0..00000000 --- a/assets/js/f88d53d7.c6647b73.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[9582],{7912:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>d,metadata:()=>i,toc:()=>a});var t=n(4848),s=n(8453);const d={sidebar_position:0},r="Addon Modules Overview",i={id:"components/addon-modules/index",title:"Addon Modules Overview",description:"",source:"@site/docs/components/addon-modules/index.md",sourceDirName:"components/addon-modules",slug:"/components/addon-modules/",permalink:"/iot/components/addon-modules/",draft:!1,unlisted:!1,editUrl:"https://github.com/lobaro/iot/tree/master/docs/components/addon-modules/index.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"componentsSidebar",previous:{title:"Spelsberg TG PC 1208-6-o",permalink:"/iot/components/enclosures/spelsberg_TG_PC_1208-6-o"}},c={},a=[];function u(e){const o={h1:"h1",...(0,s.R)(),...e.components};return(0,t.jsx)(o.h1,{id:"addon-modules-overview",children:"Addon Modules Overview"})}function l(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},8453:(e,o,n)=>{n.d(o,{R:()=>r,x:()=>i});var t=n(6540);const s={},d=t.createContext(s);function r(e){const o=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(d.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f9990df0.b0d90804.js b/assets/js/f9990df0.b0d90804.js new file mode 100644 index 00000000..438e99ed --- /dev/null +++ b/assets/js/f9990df0.b0d90804.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3228],{9208:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png 1600w,"+n.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png 1802w",images:[{path:n.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",width:1600,height:1323},{path:n.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png",width:1802,height:1490}],src:n.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",toString:function(){return n.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png"},placeholder:void 0,width:1600,height:1323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVR4nAFIAbf+ALi4sn+zq6H/sKCU+7esn//At6X/wLSg/7qtmP6onYv/k4Z3+Ma4oiQAzczKnJ6wov9XgGj8g5J4/4OOfP9PY0r/UV9J/mlzY/+QjX3/sZ6MRQDTzMWxj7Ce/wdyQvxdkHr/bYyC/zRWO/8VPin/Rm9t/ZGXkf+xoIhWAMzS2bKmwrr/BWEw/EdyZf9EVzv/c3ZY/2qCiv9denj9kaaw/6SkpHMA0cfDs5W1mP9TiGj8d3Jv/2dpWP9SYk7/JlRC/0RjV/yRnqH/qKyysADPxLezl6qL/3mPjPqim5r9srm1/am+uv0iYU39SE9J+oaJg/+jqrJnAOHg27aGk3r/eIuJ/Jqksv+WrLv/mcXV/yFjT/80RkT8naSi/7/ExGkA3NjShayuos2ChoXBcXF4w2xwesNfc3vCVmthwm50aMCho6DMwMDAThY6x3U9c17CAAAAAElFTkSuQmCC"}},1313:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg 999w",images:[{path:n.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg",width:999,height:720}],src:n.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg",toString:function(){return n.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg"},placeholder:void 0,width:999,height:720},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAHAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAYH/8QAIRAAAgIBAgcAAAAAAAAAAAAAAQIAAwQRMQUGEhUhYaH/xAAUAQEAAAAAAAAAAAAAAAAAAAAB/8QAFREBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhEDEQA/AN2tfiDcxdsroa1VK2PkG0AVoT4YDfq9SqWrICgHIUkDTU17/YiENf/Z"}},9716:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/images/ideal-img/labelv3.0e38395.300.png 300w",images:[{path:n.p+"assets/images/ideal-img/labelv3.0e38395.300.png",width:300,height:141}],src:n.p+"assets/images/ideal-img/labelv3.0e38395.300.png",toString:function(){return n.p+"assets/images/ideal-img/labelv3.0e38395.300.png"},placeholder:void 0,width:300,height:141},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsUlEQVR4nB3MTQqCQABAYQ8fdIWgCGsXQd2gbYsgNUrzDytnJHWySY0Kghe2fPD4jM+n5Pm8Udc5batompL7PeP7bZnPp0zMAavVEkOpjMtFkCQJUmYIIUlTgdYPhsMRvV6fxWKGcT4HRFFIEBzxPBfHsSiKTm8Yj0eYpollrbsxRmYFm82Ww+GI70fE8Qmta2x7h+t2kIfx0CFVlZDnPmURolRMmu7//X5dqaoTUlj8AJXlsPmMwg3sAAAAAElFTkSuQmCC"}},1554:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=n(4848),s=n(8453);const o={sidebar_position:1,title:"wM-Bus GW V3 (Battery)"},r="Wireless M-BUS Gateway V3 (Battery)",a={id:"products/metering-gateways/wireless-mbus-gateway-v3",title:"wM-Bus GW V3 (Battery)",description:"Wireless M-BUS Gateway V3 (Battery){"use strict";n.d(t,{R:()=>r,x:()=>a});var i=n(6540);const s={},o=i.createContext(s);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f9990df0.e046e9f4.js b/assets/js/f9990df0.e046e9f4.js deleted file mode 100644 index 99b9b65e..00000000 --- a/assets/js/f9990df0.e046e9f4.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[3228],{9208:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png 1600w,"+n.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png 1802w",images:[{path:n.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",width:1600,height:1323},{path:n.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png",width:1802,height:1490}],src:n.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",toString:function(){return n.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png"},placeholder:void 0,width:1600,height:1323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVR4nAFIAbf+ALi4sn+zq6H/sKCU+7esn//At6X/wLSg/7qtmP6onYv/k4Z3+Ma4oiQAzczKnJ6wov9XgGj8g5J4/4OOfP9PY0r/UV9J/mlzY/+QjX3/sZ6MRQDTzMWxj7Ce/wdyQvxdkHr/bYyC/zRWO/8VPin/Rm9t/ZGXkf+xoIhWAMzS2bKmwrr/BWEw/EdyZf9EVzv/c3ZY/2qCiv9denj9kaaw/6SkpHMA0cfDs5W1mP9TiGj8d3Jv/2dpWP9SYk7/JlRC/0RjV/yRnqH/qKyysADPxLezl6qL/3mPjPqim5r9srm1/am+uv0iYU39SE9J+oaJg/+jqrJnAOHg27aGk3r/eIuJ/Jqksv+WrLv/mcXV/yFjT/80RkT8naSi/7/ExGkA3NjShayuos2ChoXBcXF4w2xwesNfc3vCVmthwm50aMCho6DMwMDAThY6x3U9c17CAAAAAElFTkSuQmCC"}},1313:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg 999w",images:[{path:n.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg",width:999,height:720}],src:n.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg",toString:function(){return n.p+"assets/images/ideal-img/LOB-GW-HYB-WMBUS_wmbus-gateway-v3_Lorawan_NB-IoT_noBorder.da1b2a8.999.jpg"},placeholder:void 0,width:999,height:720},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAHAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAYH/8QAIRAAAgIBAgcAAAAAAAAAAAAAAQIAAwQRMQUGEhUhYaH/xAAUAQEAAAAAAAAAAAAAAAAAAAAB/8QAFREBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhEDEQA/AN2tfiDcxdsroa1VK2PkG0AVoT4YDfq9SqWrICgHIUkDTU17/YiENf/Z"}},9716:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/images/ideal-img/labelv3.0e38395.300.png 300w",images:[{path:n.p+"assets/images/ideal-img/labelv3.0e38395.300.png",width:300,height:141}],src:n.p+"assets/images/ideal-img/labelv3.0e38395.300.png",toString:function(){return n.p+"assets/images/ideal-img/labelv3.0e38395.300.png"},placeholder:void 0,width:300,height:141},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsUlEQVR4nB3MTQqCQABAYQ8fdIWgCGsXQd2gbYsgNUrzDytnJHWySY0Kghe2fPD4jM+n5Pm8Udc5batompL7PeP7bZnPp0zMAavVEkOpjMtFkCQJUmYIIUlTgdYPhsMRvV6fxWKGcT4HRFFIEBzxPBfHsSiKTm8Yj0eYpollrbsxRmYFm82Ww+GI70fE8Qmta2x7h+t2kIfx0CFVlZDnPmURolRMmu7//X5dqaoTUlj8AJXlsPmMwg3sAAAAAElFTkSuQmCC"}},1554:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=n(4848),s=n(8453);const o={sidebar_position:1,displayed_sidebar:"productsSidebar",title:"wM-Bus GW V3 (Battery)"},r="Wireless M-BUS Gateway V3 (Battery)",a={id:"products/metering-gateways/wireless-mbus-gateway-v3",title:"wM-Bus GW V3 (Battery)",description:"Wireless M-BUS Gateway V3 (Battery){"use strict";n.d(t,{R:()=>r,x:()=>a});var i=n(6540);const s={},o=i.createContext(s);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb6501ba.a3dcf216.js b/assets/js/fb6501ba.a3dcf216.js deleted file mode 100644 index 55ff18f4..00000000 --- a/assets/js/fb6501ba.a3dcf216.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1538],{9208:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png 1600w,"+t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png 1802w",images:[{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",width:1600,height:1323},{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png",width:1802,height:1490}],src:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",toString:function(){return t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png"},placeholder:void 0,width:1600,height:1323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVR4nAFIAbf+ALi4sn+zq6H/sKCU+7esn//At6X/wLSg/7qtmP6onYv/k4Z3+Ma4oiQAzczKnJ6wov9XgGj8g5J4/4OOfP9PY0r/UV9J/mlzY/+QjX3/sZ6MRQDTzMWxj7Ce/wdyQvxdkHr/bYyC/zRWO/8VPin/Rm9t/ZGXkf+xoIhWAMzS2bKmwrr/BWEw/EdyZf9EVzv/c3ZY/2qCiv9denj9kaaw/6SkpHMA0cfDs5W1mP9TiGj8d3Jv/2dpWP9SYk7/JlRC/0RjV/yRnqH/qKyysADPxLezl6qL/3mPjPqim5r9srm1/am+uv0iYU39SE9J+oaJg/+jqrJnAOHg27aGk3r/eIuJ/Jqksv+WrLv/mcXV/yFjT/80RkT8naSi/7/ExGkA3NjShayuos2ChoXBcXF4w2xwesNfc3vCVmthwm50aMCho6DMwMDAThY6x3U9c17CAAAAAElFTkSuQmCC"}},9133:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/Lobaro_WMB_HYB-WMBUS-full_.ce96416.899.jpg 899w",images:[{path:t.p+"assets/images/ideal-img/Lobaro_WMB_HYB-WMBUS-full_.ce96416.899.jpg",width:899,height:994}],src:t.p+"assets/images/ideal-img/Lobaro_WMB_HYB-WMBUS-full_.ce96416.899.jpg",toString:function(){return t.p+"assets/images/ideal-img/Lobaro_WMB_HYB-WMBUS-full_.ce96416.899.jpg"},placeholder:void 0,width:899,height:994},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAALAAoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABgj/xAAjEAABAwMDBQEAAAAAAAAAAAABAgMEAAURBhJBISJRYoGR/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AKAtd0Zh3e9MPpcTvnZSojtILTY6fQfykgksEAh5og+4ovN07antZxpTsRKnlAyFErVguJ2gKKc4zgDjilm0eBQf/9k="}},9716:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png 300w",images:[{path:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",width:300,height:141}],src:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",toString:function(){return t.p+"assets/images/ideal-img/labelv3.0e38395.300.png"},placeholder:void 0,width:300,height:141},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsUlEQVR4nB3MTQqCQABAYQ8fdIWgCGsXQd2gbYsgNUrzDytnJHWySY0Kghe2fPD4jM+n5Pm8Udc5batompL7PeP7bZnPp0zMAavVEkOpjMtFkCQJUmYIIUlTgdYPhsMRvV6fxWKGcT4HRFFIEBzxPBfHsSiKTm8Yj0eYpollrbsxRmYFm82Ww+GI70fE8Qmta2x7h+t2kIfx0CFVlZDnPmURolRMmu7//X5dqaoTUlj8AJXlsPmMwg3sAAAAAElFTkSuQmCC"}},9906:(e,n,t)=>{"use strict";t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=t(4848),s=t(8453);const o={sidebar_position:2,displayed_sidebar:"productsSidebar",title:"wM-Bus GW (12V - 24V)"},r="Wireless M-Bus Gateway (12V - 24V)",a={id:"products/metering-gateways/wireless-mbus-gateway-dinrail",title:"wM-Bus GW (12V - 24V)",description:"Wireless M-Bus Gateway (12V - 24V){"use strict";t.d(n,{R:()=>r,x:()=>a});var i=t(6540);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb6501ba.ce0c01e7.js b/assets/js/fb6501ba.ce0c01e7.js new file mode 100644 index 00000000..00ea05b2 --- /dev/null +++ b/assets/js/fb6501ba.ce0c01e7.js @@ -0,0 +1 @@ +(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[1538],{9208:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png 1600w,"+t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png 1802w",images:[{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",width:1600,height:1323},{path:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.0542608.1802.png",width:1802,height:1490}],src:t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png",toString:function(){return t.p+"assets/images/ideal-img/GW_V3_Internal_Components.37e9146.1600.png"},placeholder:void 0,width:1600,height:1323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVR4nAFIAbf+ALi4sn+zq6H/sKCU+7esn//At6X/wLSg/7qtmP6onYv/k4Z3+Ma4oiQAzczKnJ6wov9XgGj8g5J4/4OOfP9PY0r/UV9J/mlzY/+QjX3/sZ6MRQDTzMWxj7Ce/wdyQvxdkHr/bYyC/zRWO/8VPin/Rm9t/ZGXkf+xoIhWAMzS2bKmwrr/BWEw/EdyZf9EVzv/c3ZY/2qCiv9denj9kaaw/6SkpHMA0cfDs5W1mP9TiGj8d3Jv/2dpWP9SYk7/JlRC/0RjV/yRnqH/qKyysADPxLezl6qL/3mPjPqim5r9srm1/am+uv0iYU39SE9J+oaJg/+jqrJnAOHg27aGk3r/eIuJ/Jqksv+WrLv/mcXV/yFjT/80RkT8naSi/7/ExGkA3NjShayuos2ChoXBcXF4w2xwesNfc3vCVmthwm50aMCho6DMwMDAThY6x3U9c17CAAAAAElFTkSuQmCC"}},9133:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/Lobaro_WMB_HYB-WMBUS-full_.ce96416.899.jpg 899w",images:[{path:t.p+"assets/images/ideal-img/Lobaro_WMB_HYB-WMBUS-full_.ce96416.899.jpg",width:899,height:994}],src:t.p+"assets/images/ideal-img/Lobaro_WMB_HYB-WMBUS-full_.ce96416.899.jpg",toString:function(){return t.p+"assets/images/ideal-img/Lobaro_WMB_HYB-WMBUS-full_.ce96416.899.jpg"},placeholder:void 0,width:899,height:994},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAALAAoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABgj/xAAjEAABAwMDBQEAAAAAAAAAAAABAgMEAAURBhJBISJRYoGR/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AKAtd0Zh3e9MPpcTvnZSojtILTY6fQfykgksEAh5og+4ovN07antZxpTsRKnlAyFErVguJ2gKKc4zgDjilm0eBQf/9k="}},9716:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png 300w",images:[{path:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",width:300,height:141}],src:t.p+"assets/images/ideal-img/labelv3.0e38395.300.png",toString:function(){return t.p+"assets/images/ideal-img/labelv3.0e38395.300.png"},placeholder:void 0,width:300,height:141},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsUlEQVR4nB3MTQqCQABAYQ8fdIWgCGsXQd2gbYsgNUrzDytnJHWySY0Kghe2fPD4jM+n5Pm8Udc5batompL7PeP7bZnPp0zMAavVEkOpjMtFkCQJUmYIIUlTgdYPhsMRvV6fxWKGcT4HRFFIEBzxPBfHsSiKTm8Yj0eYpollrbsxRmYFm82Ww+GI70fE8Qmta2x7h+t2kIfx0CFVlZDnPmURolRMmu7//X5dqaoTUlj8AJXlsPmMwg3sAAAAAElFTkSuQmCC"}},9906:(e,n,t)=>{"use strict";t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=t(4848),s=t(8453);const o={sidebar_position:2,title:"wM-Bus GW (12V - 24V)"},r="Wireless M-Bus Gateway (12V - 24V)",a={id:"products/metering-gateways/wireless-mbus-gateway-dinrail",title:"wM-Bus GW (12V - 24V)",description:"Wireless M-Bus Gateway (12V - 24V){"use strict";t.d(n,{R:()=>r,x:()=>a});var i=t(6540);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.2a896829.js b/assets/js/main.2a896829.js deleted file mode 100644 index 4a918bc7..00000000 --- a/assets/js/main.2a896829.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.2a896829.js.LICENSE.txt */ -(self.webpackChunklobaro_docs=self.webpackChunklobaro_docs||[]).push([[8792],{2413:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),a=n.n(r),o=n(4054);const i={"010bb5b4":[()=>n.e(1417).then(n.bind(n,1810)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/index.md",1810],"01a49a4f":[()=>n.e(185).then(n.bind(n,8794)),"@site/docs/configuration/lte-network-configuration.md",8794],"02fe52da":[()=>n.e(6322).then(n.bind(n,1556)),"@site/docs/platform/administration/datasources.md",1556],"049cbdee":[()=>n.e(9675).then(n.bind(n,4942)),"@site/docs/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol.md",4942],"069518d7":[()=>n.e(9075).then(n.bind(n,9643)),"@site/docs/products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator.md",9643],"09feb8de":[()=>n.e(2114).then(n.bind(n,4855)),"@site/docs/components/firmware/index.md",4855],"0b02251e":[()=>n.e(3830).then(n.t.bind(n,5570,19)),"@generated/docusaurus-plugin-content-docs/default/p/iot-6a9.json",5570],"0dbe350f":[()=>n.e(8726).then(n.bind(n,5320)),"@site/docs/products/sensor-gateways/wireless-mbus-g2/manual/cfg.md",5320],"1034e1fe":[()=>n.e(136).then(n.bind(n,8882)),"@site/docs/configuration/cron-configuration.md",8882],"111ed76b":[()=>n.e(8428).then(n.bind(n,6486)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index.md",6486],"1150a092":[()=>n.e(7364).then(n.bind(n,300)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/index.md",300],"142d61b0":[()=>n.e(5907).then(n.bind(n,4369)),"@site/docs/platform/administration/server-configuration.md",4369],17896441:[()=>Promise.all([n.e(1869),n.e(4555),n.e(8401)]).then(n.bind(n,7138)),"@theme/DocItem",7138],"17f2f278":[()=>n.e(5706).then(n.bind(n,789)),"@site/docs/components/enclosures/spelsberg_TG_PC_1208-6-o.md",789],"193f150b":[()=>n.e(6050).then(n.bind(n,2637)),"@site/docs/components/firmware/app-hybrid-modbus/index.md",2637],"1c619603":[()=>n.e(2582).then(n.bind(n,8847)),"@site/docs/products/sensor-gateways/current-loop/index.md",8847],"1d8bdfb7":[()=>n.e(7225).then(n.bind(n,4426)),"@site/docs/platform/faq.md",4426],"1e6d8483":[()=>n.e(5492).then(n.bind(n,2667)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index.md",2667],"1f391b9e":[()=>Promise.all([n.e(1869),n.e(4555),n.e(6061)]).then(n.bind(n,7591)),"@theme/MDXPage",7591],"21e5f94e":[()=>n.e(7820).then(n.bind(n,1325)),"@site/docs/products/sensor-gateways/level/index.md",1325],"2283cc06":[()=>n.e(968).then(n.bind(n,1309)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/manual/cfg.md",1309],"27118f4d":[()=>n.e(5946).then(n.bind(n,9519)),"@site/docs/knowledge-base/wireless-mbus.md",9519],"28ac7599":[()=>n.e(2647).then(n.bind(n,5303)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/manual/index.md",5303],"2c53b313":[()=>n.e(4867).then(n.bind(n,8133)),"@site/docs/platform/administration/index.md",8133],"3249a05e":[()=>n.e(5588).then(n.bind(n,4138)),"@site/docs/configuration/meter-reception-filter-config.md",4138],"32ed6d30":[()=>n.e(9808).then(n.bind(n,6302)),"@site/docs/products/sensor-gateways/wireless-mbus-g2/manual/index.md",6302],"38116bff":[()=>n.e(4840).then(n.bind(n,6046)),"@site/docs/components/firmware/app-nrf9160-wmbus/changelog-download.md",6046],"38df9547":[()=>n.e(8621).then(n.bind(n,9723)),"@site/docs/products/sensor-gateways/wireless-mbus-g2/index.md",9723],"393be207":[()=>n.e(4134).then(n.bind(n,633)),"@site/src/pages/markdown-page.md",633],"413f02fd":[()=>n.e(3521).then(n.bind(n,5266)),"@site/docs/platform/devices/index.md",5266],"4ddd2498":[()=>n.e(1110).then(n.bind(n,587)),"@site/docs/configuration/lorawan-downlink-config.md",587],"54120d1c":[()=>n.e(2389).then(n.bind(n,8388)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index.md",8388],"5734ba63":[()=>n.e(2060).then(n.bind(n,6051)),"@site/docs/components/enclosures/index.md",6051],"5a4e9d38":[()=>n.e(7154).then(n.bind(n,7035)),"@site/docs/products/sensor-gateways/modbus/index.md",7035],"5a6a9bbb":[()=>n.e(835).then(n.bind(n,4125)),"@site/docs/products/sensor-gateways/wireless-mbus-g2/manual/workflow.md",4125],"5e95c892":[()=>n.e(9647).then(n.bind(n,3124)),"@theme/DocsRoot",3124],"632479e1":[()=>n.e(3010).then(n.bind(n,9134)),"@site/docs/products/sensor-gateways/wired-mbus-g1/manual/index.md",9134],"653e6c43":[()=>n.e(8774).then(n.bind(n,6472)),"@site/docs/products/sensor-gateways/wired-mbus-g1/manual/cfg.md",6472],"65f81c15":[()=>n.e(1552).then(n.bind(n,7709)),"@site/docs/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol.md",7709],"6bb8bb71":[()=>n.e(437).then(n.bind(n,7155)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index.md",7155],"7123406b":[()=>n.e(3682).then(n.bind(n,2013)),"@site/docs/products/metering-gateways/wireless-mbus-gateway-sun-v1.md",2013],"754583dd":[()=>n.e(5633).then(n.bind(n,7173)),"@site/docs/products/index.md",7173],"7adc43c9":[()=>n.e(1259).then(n.bind(n,9799)),"@site/docs/platform/administration/server-certificates.md",9799],"81ca1360":[()=>n.e(5948).then(n.bind(n,687)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index.md",687],"82416a47":[()=>n.e(8320).then(n.bind(n,3966)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/manual/workflow.md",3966],"93880fc8":[()=>n.e(1944).then(n.bind(n,7731)),"@site/docs/components/firmware/app-nrf9160-wmbus/introduction.md",7731],"9c21640e":[()=>n.e(6679).then(n.bind(n,6294)),"@site/docs/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index.md",6294],a5750849:[()=>n.e(1148).then(n.bind(n,2640)),"@site/docs/configuration/lobaro-config-tool.md",2640],a5b914f3:[()=>n.e(7244).then(n.bind(n,2608)),"@site/docs/configuration/usb-config-adapter.md",2608],a5f952c8:[()=>n.e(802).then(n.bind(n,4100)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/index.md",4100],a7456010:[()=>n.e(1235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a76cbaf7:[()=>n.e(5864).then(n.bind(n,9357)),"@site/docs/products/sensor-gateways/wired-mbus-g1/manual/workflow.md",9357],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,2881)),"@theme/DocVersionRoot",2881],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,4644)),"@theme/DocRoot",4644],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],acb1f41f:[()=>n.e(731).then(n.bind(n,3233)),"@site/docs/products/sensor-gateways/temperature/index.md",3233],b7192c96:[()=>n.e(7816).then(n.bind(n,286)),"@site/docs/platform/license/index.md",286],ba9c1b43:[()=>n.e(346).then(n.bind(n,4375)),"@site/docs/platform/administration/changelog.md",4375],bb44c6b0:[()=>n.e(2346).then(n.bind(n,1866)),"@site/docs/platform/index.md",1866],bd783ed9:[()=>n.e(8245).then(n.bind(n,3313)),"@site/docs/components/index.md",3313],be259eb1:[()=>n.e(5990).then(n.bind(n,3529)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc.md",3529],c04eaa51:[()=>n.e(2259).then(n.bind(n,2043)),"@site/docs/platform/devices/downlinks.md",2043],c248f023:[()=>n.e(7315).then(n.bind(n,6185)),"@site/docs/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index.md",6185],c377a04b:[()=>n.e(3361).then(n.bind(n,1776)),"@site/docs/index.md",1776],c3c3fdd3:[()=>n.e(8622).then(n.bind(n,2587)),"@site/docs/components/firmware/app-nrf9160-wmbus/configuration-parameter.md",2587],cd2a62e8:[()=>n.e(590).then(n.bind(n,7992)),"@site/docs/platform/integrations/index.md",7992],cf2baa63:[()=>n.e(8243).then(n.bind(n,6023)),"@site/docs/platform/administration/monitoring.md",6023],d89bbf77:[()=>n.e(3908).then(n.bind(n,5995)),"@site/docs/products/sensor-gateways/wired-mbus-g1/index.md",5995],d993ba02:[()=>n.e(7795).then(n.bind(n,9983)),"@site/docs/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index.md",9983],dcd0b923:[()=>n.e(474).then(n.bind(n,9446)),"@site/docs/products/metering-gateways/wireless-mbus-gateway-dinrail-230V.md",9446],e091b4aa:[()=>n.e(482).then(n.bind(n,6453)),"@site/docs/knowledge-base/modbus.md",6453],e68c242a:[()=>n.e(4888).then(n.bind(n,8195)),"@site/docs/platform/license/direct+/index.md",8195],eb2b5977:[()=>n.e(8822).then(n.bind(n,7439)),"@site/docs/configuration/obis-code-configuration.md",7439],f6d78023:[()=>n.e(4545).then(n.bind(n,5117)),"@site/docs/configuration/index.md",5117],f74ba575:[()=>n.e(7250).then(n.bind(n,8633)),"@site/docs/platform/3rd-party/dragino.md",8633],f88d53d7:[()=>n.e(9582).then(n.bind(n,7912)),"@site/docs/components/addon-modules/index.md",7912],f9990df0:[()=>n.e(3228).then(n.bind(n,1554)),"@site/docs/products/metering-gateways/wireless-mbus-gateway-v3.md",1554],fb6501ba:[()=>n.e(1538).then(n.bind(n,9906)),"@site/docs/products/metering-gateways/wireless-mbus-gateway-dinrail.md",9906]};var s=n(4848);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(1604),c=n(3363);function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e(2560).then(n.bind(n,2560)),modules:["@theme/NotFound"],webpack:()=>[2560],render(e,t){const n=e.default;return(0,s.jsx)(c.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},p=[],f=[],m=(0,u.A)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),a().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;delete a.__context;const l=a.__props;return delete a.__props,(0,s.jsx)(c.W,{value:i,children:(0,s.jsx)(o,{...a,...l,...n})})}})}const p=[{path:"/iot/markdown-page",component:d("/iot/markdown-page","bbd"),exact:!0},{path:"/iot/",component:d("/iot/","66c"),routes:[{path:"/iot/",component:d("/iot/","7ff"),routes:[{path:"/iot/",component:d("/iot/","436"),routes:[{path:"/iot/components/",component:d("/iot/components/","a58"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/components/addon-modules/",component:d("/iot/components/addon-modules/","977"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/components/enclosures/",component:d("/iot/components/enclosures/","24a"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/components/enclosures/spelsberg_TG_PC_1208-6-o",component:d("/iot/components/enclosures/spelsberg_TG_PC_1208-6-o","fde"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/components/firmware/",component:d("/iot/components/firmware/","e56"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/components/firmware/app-hybrid-modbus/",component:d("/iot/components/firmware/app-hybrid-modbus/","6db"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol",component:d("/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol","2b5"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/components/firmware/app-nrf9160-wmbus/changelog-download",component:d("/iot/components/firmware/app-nrf9160-wmbus/changelog-download","545"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter",component:d("/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter","b88"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/components/firmware/app-nrf9160-wmbus/introduction",component:d("/iot/components/firmware/app-nrf9160-wmbus/introduction","8e2"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol",component:d("/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol","a25"),exact:!0,sidebar:"componentsSidebar"},{path:"/iot/configuration/",component:d("/iot/configuration/","11e"),exact:!0,sidebar:"configurationSidebar"},{path:"/iot/configuration/cron-configuration",component:d("/iot/configuration/cron-configuration","5ce"),exact:!0,sidebar:"configurationSidebar"},{path:"/iot/configuration/lobaro-config-tool",component:d("/iot/configuration/lobaro-config-tool","b4c"),exact:!0,sidebar:"configurationSidebar"},{path:"/iot/configuration/lorawan-downlink-config",component:d("/iot/configuration/lorawan-downlink-config","aca"),exact:!0,sidebar:"configurationSidebar"},{path:"/iot/configuration/lte-network-configuration",component:d("/iot/configuration/lte-network-configuration","fcd"),exact:!0,sidebar:"configurationSidebar"},{path:"/iot/configuration/meter-reception-filter-config",component:d("/iot/configuration/meter-reception-filter-config","281"),exact:!0,sidebar:"configurationSidebar"},{path:"/iot/configuration/obis-code-configuration",component:d("/iot/configuration/obis-code-configuration","2c6"),exact:!0,sidebar:"configurationSidebar"},{path:"/iot/configuration/usb-config-adapter",component:d("/iot/configuration/usb-config-adapter","397"),exact:!0,sidebar:"configurationSidebar"},{path:"/iot/knowledge-base/modbus",component:d("/iot/knowledge-base/modbus","b9c"),exact:!0,sidebar:"knowledgeBaseSidebar"},{path:"/iot/knowledge-base/wireless-mbus",component:d("/iot/knowledge-base/wireless-mbus","a10"),exact:!0,sidebar:"knowledgeBaseSidebar"},{path:"/iot/platform/",component:d("/iot/platform/","6cb"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/3rd-party/dragino",component:d("/iot/platform/3rd-party/dragino","33f"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/administration/",component:d("/iot/platform/administration/","470"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/administration/changelog",component:d("/iot/platform/administration/changelog","0ce"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/administration/datasources",component:d("/iot/platform/administration/datasources","25d"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/administration/monitoring",component:d("/iot/platform/administration/monitoring","ab6"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/administration/server-certificates",component:d("/iot/platform/administration/server-certificates","c28"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/administration/server-configuration",component:d("/iot/platform/administration/server-configuration","630"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/devices/",component:d("/iot/platform/devices/","89c"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/devices/downlinks",component:d("/iot/platform/devices/downlinks","c6c"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/faq",component:d("/iot/platform/faq","449"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/integrations/",component:d("/iot/platform/integrations/","b3b"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/license/",component:d("/iot/platform/license/","62d"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/platform/license/direct+/",component:d("/iot/platform/license/direct+/","109"),exact:!0,sidebar:"cloudSidebar"},{path:"/iot/products/",component:d("/iot/products/","eda"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail",component:d("/iot/products/metering-gateways/wireless-mbus-gateway-dinrail","699"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-230V",component:d("/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-230V","ddb"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator",component:d("/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator","7eb"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/metering-gateways/wireless-mbus-gateway-sun-v1",component:d("/iot/products/metering-gateways/wireless-mbus-gateway-sun-v1","ffe"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/metering-gateways/wireless-mbus-gateway-v3",component:d("/iot/products/metering-gateways/wireless-mbus-gateway-v3","195"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/current-loop/",component:d("/iot/products/sensor-gateways/current-loop/","f74"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/level/",component:d("/iot/products/sensor-gateways/level/","301"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/modbus/",component:d("/iot/products/sensor-gateways/modbus/","b18"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/temperature/",component:d("/iot/products/sensor-gateways/temperature/","f95"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wired-mbus-g1/",component:d("/iot/products/sensor-gateways/wired-mbus-g1/","465"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/",component:d("/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/","cdd"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wired-mbus-g1/manual/",component:d("/iot/products/sensor-gateways/wired-mbus-g1/manual/","2d1"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg",component:d("/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg","aa4"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow",component:d("/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow","3ab"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g2/",component:d("/iot/products/sensor-gateways/wireless-mbus-g2/","1b5"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/",component:d("/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/","c23"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/",component:d("/iot/products/sensor-gateways/wireless-mbus-g2/manual/","24e"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg",component:d("/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg","c2a"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow",component:d("/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow","4c3"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/","4d8"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/","031"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/","d9b"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/","794"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/","932"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/","c93"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/","0e1"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/","121"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc","620"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/","aa0"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/manual/","9dc"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg","5d5"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow",component:d("/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow","e6e"),exact:!0,sidebar:"productsSidebar"},{path:"/iot/",component:d("/iot/","dcd"),exact:!0,sidebar:"allDocSidebar"}]}]}]},{path:"*",component:d("*")}]},8848:(e,t,n)=>{"use strict";n.d(t,{o:()=>o,x:()=>i});var r=n(6540),a=n(4848);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},5022:(e,t,n)=>{"use strict";var r=n(6540),a=n(5338),o=n(545),i=n(4625),s=n(4784),l=n(1712);const u=[n(5300),n(4753),n(5729),n(8252),n(1132)];var c=n(2413),d=n(6347),p=n(2831),f=n(4848);function m(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var g=n(1141),h=n(7639),b=n(8180),y=n(6957),v=n(9817),w=n(2098),k=n(9503),x=n(1482),S=n(4609),E=n(1210);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.A)(),r=(0,w.o)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,f.jsxs)(g.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.A)(),{pathname:r}=(0,d.zy)();return e+(0,S.applyTrailingSlash)((0,b.Ay)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,f.jsxs)(g.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:a}),(0,f.jsx)("link",{rel:"canonical",href:a})]})}function A(){const{i18n:{currentLocale:e}}=(0,h.A)(),{metadata:t,image:n}=(0,y.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(g.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:k.w})]}),n&&(0,f.jsx)(v.be,{image:n}),(0,f.jsx)(C,{}),(0,f.jsx)(_,{}),(0,f.jsx)(E.A,{tag:x.Cy,locale:e}),(0,f.jsx)(g.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const T=new Map;var N=n(8848),L=n(3366),O=n(6494);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const j=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,O.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(c.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(j,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const D=I,M="__docusaurus-base-url-issue-banner-container",z="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${M}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(D,{location:e,children:q})}function K(){return(0,f.jsx)(V.A,{children:(0,f.jsx)(L.l,{children:(0,f.jsxs)(N.x,{children:[(0,f.jsxs)(m,{children:[(0,f.jsx)(H,{}),(0,f.jsx)(A,{}),(0,f.jsx)(U,{}),(0,f.jsx)(Y,{})]}),(0,f.jsx)(G,{})]})})})}var Q=n(4054);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var X=n(1604);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,p.u)(c.A,e).flatMap((e=>{return t=e.route.path,Object.entries(Q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),R(e))},re=Object.freeze(ne);function ae(e){let{children:t}=e;return"hash"===s.A.future.experimental_router?(0,f.jsx)(i.I9,{children:t}):(0,f.jsx)(i.Kd,{children:t})}const oe=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(o.vd,{children:(0,f.jsx)(ae,{children:(0,f.jsx)(K,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(oe)window.docusaurusRoot=a.hydrateRoot(e,t,{onRecoverableError:n});else{const r=a.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};R(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},3366:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/iot/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/iot/","mainDocId":"index","docs":[{"id":"components/addon-modules/index","path":"/iot/components/addon-modules/","sidebar":"componentsSidebar"},{"id":"components/enclosures/index","path":"/iot/components/enclosures/","sidebar":"componentsSidebar"},{"id":"components/enclosures/spelsberg_TG_PC_1208-6-o","path":"/iot/components/enclosures/spelsberg_TG_PC_1208-6-o","sidebar":"componentsSidebar"},{"id":"components/firmware/app-hybrid-modbus/index","path":"/iot/components/firmware/app-hybrid-modbus/","sidebar":"componentsSidebar"},{"id":"components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol","path":"/iot/components/firmware/app-nrf9160-wmbus/cellular-iot-communication-protocol","sidebar":"componentsSidebar"},{"id":"components/firmware/app-nrf9160-wmbus/changelog-download","path":"/iot/components/firmware/app-nrf9160-wmbus/changelog-download","sidebar":"componentsSidebar"},{"id":"components/firmware/app-nrf9160-wmbus/configuration-parameter","path":"/iot/components/firmware/app-nrf9160-wmbus/configuration-parameter","sidebar":"componentsSidebar"},{"id":"components/firmware/app-nrf9160-wmbus/introduction","path":"/iot/components/firmware/app-nrf9160-wmbus/introduction","sidebar":"componentsSidebar"},{"id":"components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol","path":"/iot/components/firmware/app-nrf9160-wmbus/lorawan-communication-protocol","sidebar":"componentsSidebar"},{"id":"components/firmware/index","path":"/iot/components/firmware/","sidebar":"componentsSidebar"},{"id":"components/index","path":"/iot/components/","sidebar":"componentsSidebar"},{"id":"configuration/cron-configuration","path":"/iot/configuration/cron-configuration","sidebar":"configurationSidebar"},{"id":"configuration/index","path":"/iot/configuration/","sidebar":"configurationSidebar"},{"id":"configuration/lobaro-config-tool","path":"/iot/configuration/lobaro-config-tool","sidebar":"configurationSidebar"},{"id":"configuration/lorawan-downlink-config","path":"/iot/configuration/lorawan-downlink-config","sidebar":"configurationSidebar"},{"id":"configuration/lte-network-configuration","path":"/iot/configuration/lte-network-configuration","sidebar":"configurationSidebar"},{"id":"configuration/meter-reception-filter-config","path":"/iot/configuration/meter-reception-filter-config","sidebar":"configurationSidebar"},{"id":"configuration/obis-code-configuration","path":"/iot/configuration/obis-code-configuration","sidebar":"configurationSidebar"},{"id":"configuration/usb-config-adapter","path":"/iot/configuration/usb-config-adapter","sidebar":"configurationSidebar"},{"id":"index","path":"/iot/","sidebar":"allDocSidebar"},{"id":"knowledge-base/modbus","path":"/iot/knowledge-base/modbus","sidebar":"knowledgeBaseSidebar"},{"id":"knowledge-base/wireless-mbus","path":"/iot/knowledge-base/wireless-mbus","sidebar":"knowledgeBaseSidebar"},{"id":"platform/3rd-party/dragino","path":"/iot/platform/3rd-party/dragino","sidebar":"cloudSidebar"},{"id":"platform/administration/changelog","path":"/iot/platform/administration/changelog","sidebar":"cloudSidebar"},{"id":"platform/administration/datasources","path":"/iot/platform/administration/datasources","sidebar":"cloudSidebar"},{"id":"platform/administration/index","path":"/iot/platform/administration/","sidebar":"cloudSidebar"},{"id":"platform/administration/monitoring","path":"/iot/platform/administration/monitoring","sidebar":"cloudSidebar"},{"id":"platform/administration/server-certificates","path":"/iot/platform/administration/server-certificates","sidebar":"cloudSidebar"},{"id":"platform/administration/server-configuration","path":"/iot/platform/administration/server-configuration","sidebar":"cloudSidebar"},{"id":"platform/devices/downlinks","path":"/iot/platform/devices/downlinks","sidebar":"cloudSidebar"},{"id":"platform/devices/index","path":"/iot/platform/devices/","sidebar":"cloudSidebar"},{"id":"platform/faq","path":"/iot/platform/faq","sidebar":"cloudSidebar"},{"id":"platform/index","path":"/iot/platform/","sidebar":"cloudSidebar"},{"id":"platform/integrations/index","path":"/iot/platform/integrations/","sidebar":"cloudSidebar"},{"id":"platform/license/direct+/index","path":"/iot/platform/license/direct+/","sidebar":"cloudSidebar"},{"id":"platform/license/index","path":"/iot/platform/license/","sidebar":"cloudSidebar"},{"id":"products/index","path":"/iot/products/","sidebar":"productsSidebar"},{"id":"products/metering-gateways/wireless-mbus-gateway-dinrail","path":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail","sidebar":"productsSidebar"},{"id":"products/metering-gateways/wireless-mbus-gateway-dinrail-230V","path":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-230V","sidebar":"productsSidebar"},{"id":"products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator","path":"/iot/products/metering-gateways/wireless-mbus-gateway-dinrail-concentrator","sidebar":"productsSidebar"},{"id":"products/metering-gateways/wireless-mbus-gateway-sun-v1","path":"/iot/products/metering-gateways/wireless-mbus-gateway-sun-v1","sidebar":"productsSidebar"},{"id":"products/metering-gateways/wireless-mbus-gateway-v3","path":"/iot/products/metering-gateways/wireless-mbus-gateway-v3","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/current-loop/index","path":"/iot/products/sensor-gateways/current-loop/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/level/index","path":"/iot/products/sensor-gateways/level/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/modbus/index","path":"/iot/products/sensor-gateways/modbus/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/temperature/index","path":"/iot/products/sensor-gateways/temperature/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/index","path":"/iot/products/sensor-gateways/wired-mbus-g1/hardware-variants/dinrail-v1/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wired-mbus-g1/index","path":"/iot/products/sensor-gateways/wired-mbus-g1/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wired-mbus-g1/manual/cfg","path":"/iot/products/sensor-gateways/wired-mbus-g1/manual/cfg","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wired-mbus-g1/manual/index","path":"/iot/products/sensor-gateways/wired-mbus-g1/manual/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wired-mbus-g1/manual/workflow","path":"/iot/products/sensor-gateways/wired-mbus-g1/manual/workflow","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/index","path":"/iot/products/sensor-gateways/wireless-mbus-g2/hardware-variants/bridge-v2/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g2/index","path":"/iot/products/sensor-gateways/wireless-mbus-g2/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g2/manual/cfg","path":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/cfg","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g2/manual/index","path":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g2/manual/workflow","path":"/iot/products/sensor-gateways/wireless-mbus-g2/manual/workflow","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/index","path":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/concentrator-v1/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/index","path":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/dinrail-v1/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/index","path":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/bridge-v2/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/index","path":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/gw-v2/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/index","path":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/discontinued/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/index","path":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v3/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc","path":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/desc","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/index","path":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/gw-v4/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/index","path":"/iot/products/sensor-gateways/wireless-mbus-g3/hardware-variants/sun-v1/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/index","path":"/iot/products/sensor-gateways/wireless-mbus-g3/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/manual/cfg","path":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/cfg","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/manual/index","path":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/","sidebar":"productsSidebar"},{"id":"products/sensor-gateways/wireless-mbus-g3/manual/workflow","path":"/iot/products/sensor-gateways/wireless-mbus-g3/manual/workflow","sidebar":"productsSidebar"}],"draftIds":["knowledge-base/playground","components/firmware/app-nrf91-hybrid/index","components/firmware/app-nrf91-origin/index"],"sidebars":{"htmlSidebar":{},"allDocSidebar":{"link":{"path":"/iot/","label":"index"}},"configurationSidebar":{"link":{"path":"/iot/configuration/","label":"configuration/index"}},"productsSidebar":{"link":{"path":"/iot/products/","label":"products/index"}},"componentsSidebar":{"link":{"path":"/iot/components/","label":"components/index"}},"cloudSidebar":{"link":{"path":"/iot/platform/","label":"platform/index"}},"knowledgeBaseSidebar":{"link":{"path":"/iot/knowledge-base/wireless-mbus","label":"knowledge-base/wireless-mbus"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(2654);const l=JSON.parse('{"docusaurusVersion":"3.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.4.0"},"docusaurus-plugin-image-zoom":{"type":"package","name":"docusaurus-plugin-image-zoom","version":"2.0.0"},"docusaurus-plugin-ideal-image":{"type":"package","name":"@docusaurus/plugin-ideal-image","version":"3.4.0"}}}');var u=n(4848);const c={siteConfig:a.A,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},d=r.createContext(c);function p(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},3832:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});var r=n(6540),a=n(1712),o=n(1141),i=n(4609),s=n(3844),l=n(3363),u=n(4848);function c(e){let{error:t,tryAgain:n}=e;return(0,u.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,u.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,u.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,u.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,u.jsx)(l.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)(p,{children:(0,u.jsxs)(g,{fallback:()=>(0,u.jsx)(c,{error:t,tryAgain:n}),children:[(0,u.jsx)(o.A,{children:(0,u.jsx)("title",{children:"Page Error"})}),(0,u.jsx)(s.A,{children:(0,u.jsx)(c,{error:t,tryAgain:n})})]})})}const m=e=>(0,u.jsx)(f,{...e});class g extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},1712:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1141:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(545),a=n(4848);function o(e){return(0,a.jsx)(r.mg,{...e})}},4783:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),a=n(4625),o=n(4609),i=n(7639),s=n(877),l=n(1712),u=n(7344),c=n(8180),d=n(4848);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:v}=(0,i.A)(),{trailingSlash:w,baseUrl:k}=v,x=v.future.experimental_router,{withBaseUrl:S}=(0,c.hH)(),E=(0,u.A)(),_=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>_.current));const C=p||f;const A=(0,s.A)(C),T=C?.replace("pathname://","");let N=void 0!==T?(L=T,b&&(e=>e.startsWith("/"))(L)?S(L):L):void 0;var L;"hash"===x&&N?.startsWith("./")&&(N=N?.slice(1)),N&&A&&(N=(0,o.applyTrailingSlash)(N,{trailingSlash:w,baseUrl:k}));const O=(0,r.useRef)(!1),P=n?a.k2:a.N_,j=l.A.canUseIntersectionObserver,R=(0,r.useRef)(),I=()=>{O.current||null==N||(window.docusaurus.preload(N),O.current=!0)};(0,r.useEffect)((()=>(!j&&A&&null!=N&&window.docusaurus.prefetch(N),()=>{j&&R.current&&R.current.disconnect()})),[R,N,j,A]);const D=N?.startsWith("#")??!1,M=!y.target||"_self"===y.target,z=!N||!A||!M;return h||!D&&z||E.collectLink(N),y.id&&E.collectAnchor(y.id),z?(0,d.jsx)("a",{ref:_,href:N,...C&&!A&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,d.jsx)(P,{...y,onMouseEnter:I,onTouchStart:I,innerRef:e=>{_.current=e,j&&e&&A&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=N&&window.docusaurus.prefetch(N))}))})),R.current.observe(e))},to:N,...n&&{isActive:g,activeClassName:m}})}const f=r.forwardRef(p)},9175:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},3230:(e,t,n)=>{"use strict";n.d(t,{A:()=>u,T:()=>l});var r=n(6540),a=n(4848);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(s({message:n,id:r}),t)}function u(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},4598:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},877:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},8180:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,hH:()=>i});var r=n(6540),a=n(7639),o=n(877);function i(){const{siteConfig:e}=(0,a.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:a=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,o.z)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(a)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},7344:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function i(){return o()}},7639:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(3366);function o(){return(0,r.useContext)(a.o)}},1062:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(8848);function o(){return(0,r.useContext)(a.o)}},6494:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540);const a=n(1712).A.canUseDOM?r.useLayoutEffect:r.useEffect},1604:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},3363:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>o});var r=n(6540),a=n(4848);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:s,children:t})}},4721:(e,t,n)=>{"use strict";n.d(t,{zK:()=>g,vT:()=>p,Gy:()=>c,HW:()=>h,ht:()=>d,r7:()=>m,jh:()=>f});var r=n(6347),a=n(7639),o=n(4598);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>{try{return function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function p(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return s(t)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return l(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},5729:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(5947),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},4753:(e,t,n)=>{"use strict";n.r(t);var r=n(1765),a=n(4784);!function(e){const{themeConfig:{prism:t}}=a.A,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(3254)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},5225:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(4164),a=n(3230),o=n(6957),i=n(4783),s=n(7344);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(4848);function c(e){let{as:t,id:n,...c}=e;const d=(0,s.A)(),{navbar:{hideOnScroll:p}}=(0,o.p)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const f=(0,a.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,u.jsxs)(t,{...c,className:(0,r.A)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},716:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(4848);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},3844:(e,t,n)=>{"use strict";n.d(t,{A:()=>ft});var r=n(6540),a=n(4164),o=n(3832),i=n(9817),s=n(6347),l=n(3230),u=n(4067),c=n(4848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(8630),b=n(9503);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(g,{className:y.skipToContent})}var w=n(6957),k=n(2);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:a,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.A)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,a.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.M)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,c.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,c.jsx)("div",{className:A.announcementBarPlaceholder}),(0,c.jsx)(C,{className:A.announcementBarContent}),o&&(0,c.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var N=n(1938),L=n(4245);var O=n(4799),P=n(763);const j=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,N.M)(),t=(0,P.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,O.ZC)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,c.jsx)(j.Provider,{value:n,children:t})}function I(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function D(){const e=(0,r.useContext)(j);if(!e)throw new O.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=D();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,a.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var z=n(7710),F=n(1062);function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,F.A)(),s=(0,l.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,a.A)(U.toggle,t),children:(0,c.jsxs)("button",{className:(0,a.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,c.jsx)(B,{className:(0,a.A)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)($,{className:(0,a.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const V=r.memo(H),W={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,z.G)();return r?null:(0,c.jsx)(V,{className:t,buttonClassName:"dark"===n?W.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var q=n(20);function Y(){return(0,c.jsx)(q.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,N.M)();return(0,c.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,c.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Q(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(Y,{}),(0,c.jsx)(G,{className:"margin-right--md"}),(0,c.jsx)(K,{})]})}var Z=n(4783),X=n(8180),J=n(877);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(716);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...u}=e;const d=(0,X.Ay)(r),p=(0,X.Ay)(t),f=(0,X.Ay)(a,{forcePrependBaseUrl:!0}),m=o&&a&&!(0,J.A)(a),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[o,m&&(0,c.jsx)(te.A,{...s&&{width:12,height:12}})]})};return a?(0,c.jsx)(Z.A,{href:l?f:a,...u,...g}):(0,c.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...u,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,c.jsx)(ne,{className:(0,a.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,a.A)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,c.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(4549),se=n(260),le=n(7639);const ue={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ce(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const l=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,c.jsxs)("div",{ref:l,className:(0,a.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,a.A)("navbar__link",o),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:s.children??s.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_e,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),(0,c.jsxs)("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,c.jsx)(ne,{role:"button",className:(0,a.A)(ue.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,c.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(_e,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,c.jsx)(r,{...n})}var me=n(2098);function ge(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const he="iconLanguage_nlXk";var be=n(9175);const ye={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,a.A)(n,ye.navbarSearchContainer),children:t})}var we=n(4721),ke=n(5215);var xe=n(2780);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,le.A)(),p=(0,me.o)(),{search:f,hash:m}=(0,s.zy)(),g=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,l.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(fe,{...o,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(ge,{className:he}),h]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(ve,{className:n,children:(0,c.jsx)(be.A,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,c.jsx)(i,{className:(0,a.A)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.zK)(r),i=(0,ke.QB)(t,r),s=o?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>s||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.zK)(r),i=(0,ke.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,ke.Vd)(r)[0],i=t??o.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,c.jsx)(oe,{...a,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:u,hash:d}=(0,s.zy)(),p=(0,we.zK)(n),f=(0,we.jh)(n),{savePreferredVersionName:m}=(0,xe.g1)(n),g=[...a,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...o],h=(0,ke.Vd)(n)[0],b=t&&g.length>1?(0,l.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,y=t&&g.length>1?void 0:Se(h).path;return g.length<=1?(0,c.jsx)(oe,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,c.jsx)(fe,{...i,mobile:t,label:b,to:y,items:g,isActive:r?()=>!1:void 0})}};function _e(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ee[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(a,{...n})}function Ce(){const e=(0,N.M)(),t=(0,w.p)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_e,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ae(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(l.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,w.p)().navbar.items.length,t=D();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(Ae,{onClick:()=>t.hide()}),t.content]})}function Ne(){const e=(0,N.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,c.jsx)(M,{header:(0,c.jsx)(Q,{}),primaryMenu:(0,c.jsx)(Ce,{}),secondaryMenu:(0,c.jsx)(Te,{})}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Oe(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,a.A)("navbar-sidebar__backdrop",e.className)})}function Pe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.p)(),i=(0,N.M)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,L.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:s,"aria-label":(0,l.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.A)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!d&&Le.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Oe,{onClick:i.toggle}),(0,c.jsx)(Ne,{})]})}var je=n(4609);const Re={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Ie(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(l.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function De(e){let{error:t}=e;const n=(0,je.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Re.errorBoundaryError,children:n})}class Me extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const ze="right";function Fe(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,N.M)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,l.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,c.jsx)(Fe,{})})}const $e={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(Me,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,c.jsx)(_e,{...e})},t)))})}function He(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Ve(){const e=(0,N.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??ze)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,c.jsx)(He,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(Be,{}),(0,c.jsx)(Y,{}),(0,c.jsx)(Ue,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Ue,{items:r}),(0,c.jsx)(G,{className:$e.colorModeToggle}),!a&&(0,c.jsx)(ve,{children:(0,c.jsx)(be.A,{})})]})})}function We(){return(0,c.jsx)(Pe,{children:(0,c.jsx)(Ve,{})})}function Ge(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,s=(0,X.Ay)(n),l=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(Z.A,{className:"footer__link-item",...r?{href:o?l:r}:{to:s},...i,children:[a,r&&!(0,J.A)(r)&&(0,c.jsx)(te.A,{})]})}function qe(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(Ge,{item:t})},t.href??t.to)}function Ye(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(qe,{item:e},t)))})]})}function Ke(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(Ye,{column:e},t)))})}function Qe(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ze(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(Ge,{item:t})}function Xe(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Ze,{item:e}),t.length!==n+1&&(0,c.jsx)(Qe,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(Ke,{columns:t}):(0,c.jsx)(Xe,{links:t})}var et=n(975);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(et.A,{className:(0,a.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,c.jsx)(Z.A,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,c.jsx)(nt,{logo:t})}):(0,c.jsx)(nt,{logo:t})}function at(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,c.jsx)("footer",{className:(0,a.A)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function it(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,c.jsx)(ot,{style:a,links:n&&n.length>0&&(0,c.jsx)(Je,{links:n}),logo:r&&(0,c.jsx)(rt,{logo:r}),copyright:t&&(0,c.jsx)(at,{copyright:t})})}const st=r.memo(it),lt=(0,O.fM)([z.a,k.o,L.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,c.jsx)(P.y_,{children:(0,c.jsx)(N.e,{children:(0,c.jsx)(R,{children:t})})})}]);function ut(e){let{children:t}=e;return(0,c.jsx)(lt,{children:t})}var ct=n(5225);function dt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(ct.A,{as:"h1",className:"hero__title",children:(0,c.jsx)(l.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(Ie,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(De,{error:t})})]})})})}const pt={mainWrapper:"mainWrapper_z2l0"};function ft(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.J)(),(0,c.jsxs)(ut,{children:[(0,c.jsx)(i.be,{title:s,description:l}),(0,c.jsx)(v,{}),(0,c.jsx)(T,{}),(0,c.jsx)(We,{}),(0,c.jsx)("div",{id:d,className:(0,a.A)(h.G.wrapper.main,pt.mainWrapper,r),children:(0,c.jsx)(o.A,{fallback:e=>(0,c.jsx)(dt,{...e}),children:t})}),!n&&(0,c.jsx)(st,{})]})}},20:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(4783),a=n(8180),o=n(7639),i=n(6957),s=n(975),l=n(4848);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Ay)(t.src),dark:(0,a.Ay)(t.srcDark||t.src)},i=(0,l.jsx)(s.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,o.A)(),{navbar:{title:n,logo:s}}=(0,i.p)(),{imageClassName:c,titleClassName:d,...p}=e,f=(0,a.Ay)(s?.href||"/"),m=n?"":t,g=s?.alt??m;return(0,l.jsxs)(r.A,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(u,{logo:s,alt:g,imageClassName:c}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},1210:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(1141),a=n(4848);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.A,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},975:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(6540),a=n(4164),o=n(1062),i=n(7710);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(4848);function u(e){let{className:t,children:n}=e;const u=(0,o.A)(),{colorMode:c}=(0,i.G)();return(0,l.jsx)(l.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.A)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:o},e)}))})}function c(e){const{sources:t,className:n,alt:r,...a}=e;return(0,l.jsx)(u,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},4549:(e,t,n)=>{"use strict";n.d(t,{N:()=>b,u:()=>u});var r=n(6540),a=n(1712),o=n(6494),i=n(6350),s=n(4848);const l="ease-in-out";function u(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return p(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function m(e){if(!a.A.canUseDOM)return e?c:d}function g(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:o}),(0,s.jsx)(t,{ref:c,style:u?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(c.current,n),i?.(n))},className:l,children:a})}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[l,u]=(0,r.useState)(t);return(0,o.A)((()=>{t||i(!0)}),[t]),(0,o.A)((()=>{a&&u(t)}),[a,t]),a?(0,s.jsx)(g,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?h:g;return(0,s.jsx)(r,{...n})}},2:(e,t,n)=>{"use strict";n.d(t,{M:()=>g,o:()=>m});var r=n(6540),a=n(1062),o=n(9900),i=n(4799),s=n(6957),l=n(4848);const u=(0,o.Wf)("docusaurus.announcement.dismiss"),c=(0,o.Wf)("docusaurus.announcement.id"),d=()=>"true"===u.get(),p=e=>u.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.p)(),t=(0,a.A)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&p(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},7710:(e,t,n)=>{"use strict";n.d(t,{G:()=>b,a:()=>h});var r=n(6540),a=n(1712),o=n(4799),i=n(9900),s=n(6957),l=n(4848);const u=r.createContext(void 0),c="theme",d=(0,i.Wf)(c),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>a.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),g=e=>{d.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.p)(),[a,o]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&g(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[a,i])}();return(0,l.jsx)(u.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(u);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},2780:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>b,g1:()=>v});var r=n(6540),a=n(4721),o=n(4598),i=n(6957),s=n(5215),l=n(4799),u=n(9900),c=n(4848);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,u.Wf)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.Wf)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.Wf)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function g(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return(0,c.jsx)(m.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return s.C5?(0,c.jsx)(h,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function y(){const e=(0,r.useContext)(m);if(!e)throw new l.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.W);const t=(0,a.ht)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},403:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>u});var r=n(6540),a=n(4799),o=n(4848);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(s.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(s);if(e===i)throw new a.dV("DocsSidebarProvider");return e}},3403:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(6540),a=n(4799),o=n(4848);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new a.dV("DocsVersionProvider");return e}},1938:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(6540),a=n(763),o=n(2216),i=n(2814),s=n(6957),l=n(4799),u=n(4848);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,s.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[l,u]=(0,r.useState)(!1);(0,i.$Z)((()=>{if(l)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:l})),[e,n,c,l])}function p(e){let{children:t}=e;const n=d();return(0,u.jsx)(c.Provider,{value:n,children:t})}function f(){const e=r.useContext(c);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},763:(e,t,n)=>{"use strict";n.d(t,{GX:()=>u,YL:()=>l,y_:()=>s});var r=n(6540),a=n(4799),o=n(4848);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,s]=o,l=(0,a.Be)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},9503:(e,t,n)=>{"use strict";n.d(t,{w:()=>a,J:()=>o});var r=n(6540);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},2216:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(6540),a=n(1712);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!a.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},8630:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},6350:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},5215:(e,t,n)=>{"use strict";n.d(t,{B5:()=>E,C5:()=>p,Nr:()=>f,OF:()=>w,QB:()=>S,Vd:()=>k,Y:()=>y,fW:()=>x,w8:()=>h});var r=n(6540),a=n(6347),o=n(2831),i=n(4721),s=n(2780),l=n(3403),u=n(403),c=n(5167),d=n(260);const p=!!i.Gy;function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const m=(e,t)=>void 0!==e&&(0,d.ys)(e,t),g=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||g(e.items,t))}function b(e,t){switch(e.type){case"category":return h(e,t)||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||h(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.ys)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.ys)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function w(){const e=(0,u.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,s.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>(0,c.s)([t,n,a].filter(Boolean))),[t,n,a])}function x(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,c.s)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,a.zy)(),r=(0,l.r)(),i=t.routes,s=i.find((e=>(0,a.B6)(n.pathname,e)));if(!s)return null;const u=s.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,o.v)(i),sidebarName:u,sidebarItems:c}}},2814:(e,t,n)=>{"use strict";n.d(t,{$Z:()=>i,aZ:()=>l});var r=n(6540),a=n(6347),o=n(4799);function i(e){!function(e){const t=(0,a.W6)(),n=(0,o._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){const t=(0,a.W6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function l(e){return s((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},5167:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{X:()=>r,s:()=>a})},9817:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>d,Jx:()=>m});var r=n(6540),a=n(4164),o=n(1141),i=n(3363);function s(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(8180),u=n(7639);var c=n(4848);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const s=function(e){const{siteConfig:t}=(0,u.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.hH)(),p=a?d(a,{absolute:!0}):void 0;return(0,c.jsxs)(o.A,{children:[t&&(0,c.jsx)("title",{children:s}),t&&(0,c.jsx)("meta",{property:"og:title",content:s}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),s=(0,a.A)(i,t);return(0,c.jsxs)(p.Provider,{value:s,children:[(0,c.jsx)(o.A,{children:(0,c.jsx)("html",{className:s})}),n]})}function m(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(f,{className:(0,a.A)(r,o),children:t})}},4799:(e,t,n)=>{"use strict";n.d(t,{Be:()=>u,ZC:()=>s,_q:()=>i,dV:()=>l,fM:()=>c});var r=n(6540),a=n(6494),o=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,a.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,a.A)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},260:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>s,ys:()=>i});var r=n(6540),a=n(2413),o=n(7639);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.A,baseUrl:e})),[e])}},4245:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>f,Tv:()=>c,a_:()=>m,gk:()=>g});var r=n(6540),a=n(1712),o=n(1062),i=n(6494),s=n(4799),l=n(4848);const u=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(u.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(u);if(null==e)throw new s.dV("ScrollControllerProvider");return e}const p=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),a=(0,r.useRef)(p()),o=(0,s._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function m(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.A)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function g(){const e=(0,r.useRef)(null),t=(0,o.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},1482:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>r,tU:()=>a});n(7639);const r="default";function a(e,t){return`docs-${e}-${t}`}},9900:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>c,Dv:()=>d});var r=n(6540);const a=JSON.parse('{"N":"localStorage","M":""}'),o=a.N;function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function s(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){const n=`${e}${a.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const r=s(t?.persistence);return null===r?u:{get:()=>{try{return r.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=r.getItem(n);r.setItem(n,e),i({key:n,oldValue:t,newValue:e,storage:r})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=r.getItem(n);r.removeItem(n),i({key:n,oldValue:e,newValue:null,storage:r})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===r&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},2098:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(7639),a=n(6347),o=n(4609);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.A)(),{pathname:l}=(0,a.zy)(),u=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),c=s===i?e:e.replace(`/${s}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},4067:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),a=n(6347),o=n(4799);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6957:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(7639);function a(){return(0,r.A)().siteConfig.themeConfig}},4356:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const r=n(835);function a(e){return e.endsWith("/")?e:`${e}/`}function o(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=a,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,n?a(l):o(l));var l;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=o},8274:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},4609:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(4356);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return a.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return a.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return a.removeTrailingSlash}});var o=n(835);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return o.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return o.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return o.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return o.removePrefix}});var i=n(8274);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},835:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1132:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f});var r=n(4784),a=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(e){function t(){}e(t,t)},o=function(){for(var e=arguments.length,t=Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:{}).target,t=function(){var e={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},t=void 0,n=void 0;if(b.container)if(b.container instanceof Object)t=(e=a({},e,b.container)).width-e.left-e.right-2*b.margin,n=e.height-e.top-e.bottom-2*b.margin;else{var r=(i(b.container)?b.container:document.querySelector(b.container)).getBoundingClientRect(),o=r.width,l=r.height,u=r.left,c=r.top;e=a({},e,{width:o,height:l,left:u,top:c})}t=t||e.width-2*b.margin,n=n||e.height-2*b.margin;var d=y.zoomedHd||y.original,p=s(d)?t:d.naturalWidth||t,f=s(d)?n:d.naturalHeight||n,m=d.getBoundingClientRect(),g=m.top,h=m.left,v=m.width,w=m.height,k=Math.min(Math.max(v,p),t)/v,x=Math.min(Math.max(w,f),n)/w,S=Math.min(k,x),E="scale("+S+") translate3d("+((t-v)/2-h+b.margin+e.left)/S+"px, "+((n-w)/2-g+b.margin+e.top)/S+"px, 0)";y.zoomed.style.transform=E,y.zoomedHd&&(y.zoomedHd.style.transform=E)};return new r((function(n){if(e&&-1===f.indexOf(e))n(w);else{if(y.zoomed)n(w);else{if(e)y.original=e;else{if(!(f.length>0))return void n(w);var r=f;y.original=r[0]}if(y.original.dispatchEvent(u("medium-zoom:open",{detail:{zoom:w}})),h=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,g=!0,y.zoomed=function(e){var t=e.getBoundingClientRect(),n=t.top,r=t.left,a=t.width,o=t.height,i=e.cloneNode(),s=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,l=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;return i.removeAttribute("id"),i.style.position="absolute",i.style.top=n+s+"px",i.style.left=r+l+"px",i.style.width=a+"px",i.style.height=o+"px",i.style.transform="",i}(y.original),document.body.appendChild(v),b.template){var a=i(b.template)?b.template:document.querySelector(b.template);y.template=document.createElement("div"),y.template.appendChild(a.content.cloneNode(!0)),document.body.appendChild(y.template)}if(y.original.parentElement&&"PICTURE"===y.original.parentElement.tagName&&y.original.currentSrc&&(y.zoomed.src=y.original.currentSrc),document.body.appendChild(y.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),y.original.classList.add("medium-zoom-image--hidden"),y.zoomed.classList.add("medium-zoom-image--opened"),y.zoomed.addEventListener("click",d),y.zoomed.addEventListener("transitionend",(function e(){g=!1,y.zoomed.removeEventListener("transitionend",e),y.original.dispatchEvent(u("medium-zoom:opened",{detail:{zoom:w}})),n(w)})),y.original.getAttribute("data-zoom-src")){y.zoomedHd=y.zoomed.cloneNode(),y.zoomedHd.removeAttribute("srcset"),y.zoomedHd.removeAttribute("sizes"),y.zoomedHd.removeAttribute("loading"),y.zoomedHd.src=y.zoomed.getAttribute("data-zoom-src"),y.zoomedHd.onerror=function(){clearInterval(o),console.warn("Unable to reach the zoom image target "+y.zoomedHd.src),y.zoomedHd=null,t()};var o=setInterval((function(){y.zoomedHd.complete&&(clearInterval(o),y.zoomedHd.classList.add("medium-zoom-image--opened"),y.zoomedHd.addEventListener("click",d),document.body.appendChild(y.zoomedHd),t())}),10)}else if(y.original.hasAttribute("srcset")){y.zoomedHd=y.zoomed.cloneNode(),y.zoomedHd.removeAttribute("sizes"),y.zoomedHd.removeAttribute("loading");var s=y.zoomedHd.addEventListener("load",(function(){y.zoomedHd.removeEventListener("load",s),y.zoomedHd.classList.add("medium-zoom-image--opened"),y.zoomedHd.addEventListener("click",d),document.body.appendChild(y.zoomedHd),t()}))}else t()}}}))},d=function(){return new r((function(e){if(!g&&y.original){g=!0,document.body.classList.remove("medium-zoom--opened"),y.zoomed.style.transform="",y.zoomedHd&&(y.zoomedHd.style.transform=""),y.template&&(y.template.style.transition="opacity 150ms",y.template.style.opacity=0),y.original.dispatchEvent(u("medium-zoom:close",{detail:{zoom:w}})),y.zoomed.addEventListener("transitionend",(function t(){y.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(y.zoomed),y.zoomedHd&&document.body.removeChild(y.zoomedHd),document.body.removeChild(v),y.zoomed.classList.remove("medium-zoom-image--opened"),y.template&&document.body.removeChild(y.template),g=!1,y.zoomed.removeEventListener("transitionend",t),y.original.dispatchEvent(u("medium-zoom:closed",{detail:{zoom:w}})),y.original=null,y.zoomed=null,y.zoomedHd=null,y.template=null,e(w)}))}else e(w)}))},p=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).target;return y.original?d():c({target:e})},f=[],m=[],g=!1,h=0,b=n,y={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(t)?b=t:(t||"string"==typeof t)&&o(t);var v=function(e){var t=document.createElement("div");return t.classList.add("medium-zoom-overlay"),t.style.background=e,t}((b=a({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},b)).background);document.addEventListener("click",(function(e){var t=e.target;t!==v?-1!==f.indexOf(t)&&p({target:t}):d()})),document.addEventListener("keyup",(function(e){var t=e.key||e.keyCode;"Escape"!==t&&"Esc"!==t&&27!==t||d()})),document.addEventListener("scroll",(function(){if(!g&&y.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(h-e)>b.scrollOffset&&setTimeout(d,150)}})),window.addEventListener("resize",d);var w={open:c,close:d,toggle:p,update:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e;if(e.background&&(v.style.background=e.background),e.container&&e.container instanceof Object&&(t.container=a({},b.container,e.container)),e.template){var n=i(e.template)?e.template:document.querySelector(e.template);t.template=n}return b=a({},b,t),f.forEach((function(e){e.dispatchEvent(u("medium-zoom:update",{detail:{zoom:w}}))})),w},clone:function(){return e(a({},b,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}))},attach:o,detach:function(){for(var e=arguments.length,t=Array(e),n=0;n0?t.reduce((function(e,t){return[].concat(e,l(t))}),[]):f;return r.forEach((function(e){e.classList.remove("medium-zoom-image"),e.dispatchEvent(u("medium-zoom:detach",{detail:{zoom:w}}))})),f=f.filter((function(e){return-1===r.indexOf(e)})),w},on:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f.forEach((function(r){r.addEventListener("medium-zoom:"+e,t,n)})),m.push({type:"medium-zoom:"+e,listener:t,options:n}),w},off:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f.forEach((function(r){r.removeEventListener("medium-zoom:"+e,t,n)})),m=m.filter((function(n){return!(n.type==="medium-zoom:"+e&&n.listener.toString()===t.toString())})),w},getOptions:function(){return b},getImages:function(){return f},getZoomedImage:function(){return y.original}};return w},{themeConfig:d}=r.A;function p(e){var t,n;return document.querySelector('html[data-theme="dark"]')?(null===(t=e.background)||void 0===t?void 0:t.dark)||"rgb(50, 50, 50)":(null===(n=e.background)||void 0===n?void 0:n.light)||"rgb(255, 255, 255)"}const f=function(){if("undefined"==typeof window)return null;let e;const{zoom:t}=d,{selector:n=".markdown img",config:r={}}=t||{};if(!t)return null;r.background=p(t);var a=new MutationObserver((function(){e&&e.update({background:p(t)})}));const o=document.querySelector("html");return a.observe(o,{attributes:!0,attributeFilter:["data-theme"]}),setTimeout((()=>{e&&e.detach(),e=c(n,r)}),1e3),{onRouteUpdate(){setTimeout((()=>{e&&e.detach(),e=c(n,r)}),1e3)}}}()},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>f,sC:()=>T,AO:()=>p});var r=n(8168);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(1561);function l(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var s=l(t),g=l(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,s],c=0;(l=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},5300:(e,t,n)=>{"use strict";n.r(t)},8252:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(u,i(e,c,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},5302:(e,t,n)=>{var r=n(4634);e.exports=f,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,s="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var m=e[i],g=n[2],h=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=g&&null!=m&&m!==g,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||c,_=b||y;r.push({name:h||o++,prefix:g||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:_?u(_):w?".*":"[^"+l(E)+"]+?"})}}return i{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=o.length);l++){var u=s[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++a;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];g&&y.push.apply(y,i([g])),y.push(h),b&&y.push.apply(y,i([b])),"string"==typeof u?s.splice.apply(s,[l,1].concat(y)):u.content=y}}else u.content&&i(u.content)}return s}(n.tokens)}}}})}(Prism)},132:()=>{!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},3254:(e,t,n)=>{var r={"./prism-bash":7022,"./prism-json":2514,"./prism-toml":132};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=3254},2694:(e,t,n)=>{"use strict";var r=n(6925);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),a=n(9982);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n