diff --git a/404.html b/404.html index 6d6c068..c554220 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ Page Not Found | Biotz Academy - + diff --git a/about.html b/about.html index 49d6448..eaaa5e6 100644 --- a/about.html +++ b/about.html @@ -4,7 +4,7 @@ Markdown page example 1 | Biotz Academy - + diff --git a/assets/js/0b2296e6.2fda82dc.js b/assets/js/0b2296e6.2fda82dc.js deleted file mode 100644 index d555787..0000000 --- a/assets/js/0b2296e6.2fda82dc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkacademy=self.webpackChunkacademy||[]).push([[9789],{6809:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>n,metadata:()=>r,toc:()=>h});var a=o(4848),i=o(8453);const n={sidebar_position:6,sidebar_label:"How to Create and Use a Webhook"},s="How to Create and Use Webhooks",r={id:"How-to guides/How to create and use webhooks",title:"How to Create and Use Webhooks",description:"Introduction",source:"@site/docs/How-to guides/How to create and use webhooks.md",sourceDirName:"How-to guides",slug:"/How-to guides/How to create and use webhooks",permalink:"/docs/How-to guides/How to create and use webhooks",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6,sidebar_label:"How to Create and Use a Webhook"},sidebar:"tutorialSidebar",previous:{title:"How to create a dashboard",permalink:"/docs/How-to guides/How to create a dashboard"},next:{title:"How to use dashboard variables",permalink:"/docs/How-to guides/How to use dashboard variables"}},d={},h=[{value:"Introduction",id:"introduction",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Creating a Webhook",id:"creating-a-webhook",level:2},{value:"Registering a Device Alarm with the Webhook",id:"registering-a-device-alarm-with-the-webhook",level:2},{value:"Receiving Webhook Event Data",id:"receiving-webhook-event-data",level:2}];function c(e){const t={code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"how-to-create-and-use-webhooks",children:"How to Create and Use Webhooks"}),"\n",(0,a.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,a.jsxs)(t.p,{children:["Biotz provides webhook subscriptions for its alarms. In short, a ",(0,a.jsx)("a",{href:"https://en.wikipedia.org/wiki/Webhook",children:"webhook"})," is a method used by one application (e.g., Biotz) to send real-time data to another application (e.g., customers) when a specific event occurs."]}),"\n",(0,a.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,a.jsx)(t.p,{children:"There are no prerequisites for creating a webhook. However, webhooks are used for device events, so to use them, you need a device type that includes at least one message type and schema. It's also recommended to have a device that has already transmitted some data."}),"\n",(0,a.jsx)(t.h2,{id:"creating-a-webhook",children:"Creating a Webhook"}),"\n",(0,a.jsx)(t.p,{children:'Webhooks are created from the "Developer Tools" section in the sidebar. To create a webhook, provide a name and the mandatory "callback URL" (i.e., the URL to which the event data will be pushed). Webhooks only support HTTPS URLs.'}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Developer Tools -> Webhooks",src:o(9225).A+"",width:"1659",height:"464"})})}),"\n",(0,a.jsx)(t.p,{children:'Clicking "New Webhook" takes you to a form where you can enter the name and URL for your webhook.'}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"New Webhook",src:o(9468).A+"",width:"785",height:"579"})})}),"\n",(0,a.jsx)(t.p,{children:'Upon clicking "Save," the webhook is created, and a "secret" is automatically generated. It is advised to regenerate the secret regularly.'}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Webhook Created!",src:o(1758).A+"",width:"1894",height:"566"})})}),"\n",(0,a.jsx)(t.p,{children:"Now the webhook is ready for use. Don't forget to take note of the webhook's name and secret for later use!"}),"\n",(0,a.jsx)(t.h2,{id:"registering-a-device-alarm-with-the-webhook",children:"Registering a Device Alarm with the Webhook"}),"\n",(0,a.jsx)(t.p,{children:'For a webhook to be useful, it must be subscribed to a Biotz event. Currently, only alarm notification events support webhook integration. To add one, navigate to "Alarm Triggers" under the "Setup" section in the sidebar and choose a device type (e.g., Device Type 1).'}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Select Device Type from Alarm Triggers",src:o(2692).A+"",width:"1870",height:"333"})})}),"\n",(0,a.jsx)(t.p,{children:'Then either create or edit an alarm trigger and click "Edit Webhook List."'}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Edit Webhook List",src:o(991).A+"",width:"1861",height:"499"})})}),"\n",(0,a.jsx)(t.p,{children:"Search for your webhook by name, add it from the dropdown, and then save. Now you can proceed to actually use the webhook from your app."}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Search and Add Webhook",src:o(1014).A+"",width:"1862",height:"566"})})}),"\n",(0,a.jsx)(t.h2,{id:"receiving-webhook-event-data",children:"Receiving Webhook Event Data"}),"\n",(0,a.jsx)(t.p,{children:"If all the above steps were followed and there is at least one device that generates alarms, then alarm data will be sent to the webhook URI via POST."}),"\n",(0,a.jsx)(t.p,{children:'From the client side, there should be validation of the webhook via the "Biotz-IoT-Signature" header entry. The Biotz-IoT-Signature has the following structure:'}),"\n",(0,a.jsx)(t.p,{children:"Biotz-IoT-Signature: t=1492774577,v1=d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5,"}),"\n",(0,a.jsxs)(t.p,{children:["Where the string following t= is a timestamp and the one following ",(0,a.jsx)(t.code,{children:"v1="})," is the signed payload of the event and is created by first concatenating:"]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"The string timestamp, the same as the t= part of Biotz-IoT-Signature"}),"\n",(0,a.jsxs)(t.li,{children:["The character ",(0,a.jsx)(t.code,{children:"."})]}),"\n",(0,a.jsx)(t.li,{children:"The actual alarm payload in JSON (the body of the POST request)"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"And then generating an HMAC-SHA256 hash of the concatenation using the webhook secret key."})]})}function l(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},2692:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/alarm_trigger_webhook_1-b67954b04a939fd732848c4b8458ead5.png"},991:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/alarm_trigger_webhook_2-de743ec10648875eec16b1e8d004a032.png"},1014:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/alarm_trigger_webhook_3-5ede71e93eaf49e884875fe914b1c255.png"},9225:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/developer_tools_webhooks-97beeab609345bab94ed9e8a701c2900.png"},9468:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/new_webhook-bf5a48f9e423ad7f59daf21756a3a0e9.png"},1758:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/webhook_created-475b35f149b44f78d258bc6cfeb0c72d.png"},8453:(e,t,o)=>{o.d(t,{R:()=>s,x:()=>r});var a=o(6540);const i={},n=a.createContext(i);function s(e){const t=a.useContext(n);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(i):e.components||i:s(e.components),a.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b2296e6.3da892e9.js b/assets/js/0b2296e6.3da892e9.js new file mode 100644 index 0000000..6f68552 --- /dev/null +++ b/assets/js/0b2296e6.3da892e9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkacademy=self.webpackChunkacademy||[]).push([[9789],{6809:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>n,metadata:()=>r,toc:()=>h});var a=o(4848),i=o(8453);const n={sidebar_position:6,sidebar_label:"How to Create and Use a Webhook"},s="How to Create and Use Webhooks",r={id:"How-to guides/How to create and use webhooks",title:"How to Create and Use Webhooks",description:"Introduction",source:"@site/docs/How-to guides/How to create and use webhooks.md",sourceDirName:"How-to guides",slug:"/How-to guides/How to create and use webhooks",permalink:"/docs/How-to guides/How to create and use webhooks",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6,sidebar_label:"How to Create and Use a Webhook"},sidebar:"tutorialSidebar",previous:{title:"How to create a dashboard",permalink:"/docs/How-to guides/How to create a dashboard"},next:{title:"How to use dashboard variables",permalink:"/docs/How-to guides/How to use dashboard variables"}},d={},h=[{value:"Introduction",id:"introduction",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Creating a Webhook",id:"creating-a-webhook",level:2},{value:"Registering a Device Alarm with the Webhook",id:"registering-a-device-alarm-with-the-webhook",level:2},{value:"Receiving Webhook Event Data",id:"receiving-webhook-event-data",level:2}];function c(e){const t={br:"br",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"how-to-create-and-use-webhooks",children:"How to Create and Use Webhooks"}),"\n",(0,a.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,a.jsxs)(t.p,{children:["Biotz provides webhook subscriptions for its alarms. In short, a ",(0,a.jsx)("a",{href:"https://en.wikipedia.org/wiki/Webhook",children:"webhook"})," is a method used by one application (e.g., Biotz) to send real-time data to another application (e.g., customers) when a specific event occurs."]}),"\n",(0,a.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,a.jsx)(t.p,{children:"There are no prerequisites for creating a webhook. However, webhooks are used for device events, so to use them, you need a device type that includes at least one message type and schema. It's also recommended to have a device that has already transmitted some data."}),"\n",(0,a.jsx)(t.h2,{id:"creating-a-webhook",children:"Creating a Webhook"}),"\n",(0,a.jsx)(t.p,{children:'Webhooks are created from the "Developer Tools" section in the sidebar. To create a webhook, provide a name and the mandatory "callback URL" (i.e., the URL to which the event data will be pushed). Webhooks only support HTTPS URLs.'}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Developer Tools -> Webhooks",src:o(9225).A+"",width:"1659",height:"464"})})}),"\n",(0,a.jsx)(t.p,{children:'Clicking "New Webhook" takes you to a form where you can enter the name and URL for your webhook.'}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"New Webhook",src:o(9468).A+"",width:"785",height:"579"})})}),"\n",(0,a.jsx)(t.p,{children:'Upon clicking "Save," the webhook is created, and a "secret" is automatically generated. It is advised to regenerate the secret regularly.'}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Webhook Created!",src:o(1758).A+"",width:"1894",height:"566"})})}),"\n",(0,a.jsx)(t.p,{children:"Now the webhook is ready for use. Don't forget to take note of the webhook's name and secret for later use!"}),"\n",(0,a.jsx)(t.h2,{id:"registering-a-device-alarm-with-the-webhook",children:"Registering a Device Alarm with the Webhook"}),"\n",(0,a.jsx)(t.p,{children:'For a webhook to be useful, it must be subscribed to a Biotz event. Currently, only alarm notification events support webhook integration. To add one, navigate to "Alarm Triggers" under the "Setup" section in the sidebar and choose a device type (e.g., Device Type 1).'}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Select Device Type from Alarm Triggers",src:o(2692).A+"",width:"1870",height:"333"})})}),"\n",(0,a.jsx)(t.p,{children:'Then either create or edit an alarm trigger and click "Edit Webhook List."'}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Edit Webhook List",src:o(991).A+"",width:"1861",height:"499"})})}),"\n",(0,a.jsx)(t.p,{children:"Search for your webhook by name, add it from the dropdown, and then save. Now you can proceed to actually use the webhook from your app."}),"\n",(0,a.jsx)("div",{class:"tutorial-image-container",children:(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Search and Add Webhook",src:o(1014).A+"",width:"1862",height:"566"})})}),"\n",(0,a.jsx)(t.h2,{id:"receiving-webhook-event-data",children:"Receiving Webhook Event Data"}),"\n",(0,a.jsx)(t.p,{children:"If all the above steps were followed and there is at least one device that generates alarms, then alarm data will be sent to the webhook URI via POST."}),"\n",(0,a.jsx)(t.p,{children:'From the client side, there should be validation of the webhook via the "Biotz-IoT-Signature" header entry. The Biotz-IoT-Signature has the following structure:'}),"\n",(0,a.jsx)(t.p,{children:"Biotz-IoT-Signature: t=1492774577,v1=d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5,"}),"\n",(0,a.jsxs)(t.p,{children:["Where the string following t= is a timestamp and the one following ",(0,a.jsx)(t.code,{children:"v1="})," is the signed payload of the event and is created by first concatenating:"]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"The string timestamp, the same as the t= part of Biotz-IoT-Signature"}),"\n",(0,a.jsxs)(t.li,{children:["The character ",(0,a.jsx)(t.code,{children:"."})]}),"\n",(0,a.jsx)(t.li,{children:"The actual alarm payload in JSON (the body of the POST request)"}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:["And then generating an HMAC-SHA256 hash of the concatenation using the webhook secret key.\nFor extra security and to prevent replay attacks, the client should also compare the provided timestamp with the timestamp when they received the webhook.",(0,a.jsx)(t.br,{}),"\n","It is advisable to accept the webhook only within a specified time window."]})]})}function l(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},2692:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/alarm_trigger_webhook_1-b67954b04a939fd732848c4b8458ead5.png"},991:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/alarm_trigger_webhook_2-de743ec10648875eec16b1e8d004a032.png"},1014:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/alarm_trigger_webhook_3-5ede71e93eaf49e884875fe914b1c255.png"},9225:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/developer_tools_webhooks-97beeab609345bab94ed9e8a701c2900.png"},9468:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/new_webhook-bf5a48f9e423ad7f59daf21756a3a0e9.png"},1758:(e,t,o)=>{o.d(t,{A:()=>a});const a=o.p+"assets/images/webhook_created-475b35f149b44f78d258bc6cfeb0c72d.png"},8453:(e,t,o)=>{o.d(t,{R:()=>s,x:()=>r});var a=o(6540);const i={},n=a.createContext(i);function s(e){const t=a.useContext(n);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(i):e.components||i:s(e.components),a.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.0b74eb07.js b/assets/js/runtime~main.e2db40a5.js similarity index 57% rename from assets/js/runtime~main.0b74eb07.js rename to assets/js/runtime~main.e2db40a5.js index 6097f78..5ef05b7 100644 --- a/assets/js/runtime~main.0b74eb07.js +++ b/assets/js/runtime~main.e2db40a5.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,t,r,b={},c={};function d(e){var a=c[e];if(void 0!==a)return a.exports;var f=c[e]={exports:{}};return b[e].call(f.exports,f,f.exports,d),f.exports}d.m=b,e=[],d.O=(a,f,t,r)=>{if(!f){var b=1/0;for(i=0;i=r)&&Object.keys(d.O).every((e=>d.O[e](f[o])))?f.splice(o--,1):(c=!1,r0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[f,t,r]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var r=Object.create(null);d.r(r);var b={};a=a||[null,f({}),f([]),f(f)];for(var c=2&t&&e;"object"==typeof c&&!~a.indexOf(c);c=f(c))Object.getOwnPropertyNames(c).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,d.d(r,b),r},d.d=(e,a)=>{for(var f in a)d.o(a,f)&&!d.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,f)=>(d.f[f](e,a),a)),[])),d.u=e=>"assets/js/"+({635:"b9a9e23a",748:"94375d41",1471:"de5aeb7c",1563:"e72b9bb3",1943:"519f47fb",1981:"1be0d2c3",2710:"e829bf52",2741:"8ebf884c",2750:"356a0ac6",3093:"3f776845",3338:"b5796db6",3438:"fbacb533",3473:"3c01fd32",3488:"8cb4ad27",3576:"3987870c",3590:"578ed02f",3832:"8f9e59a2",3925:"35f8ffce",4224:"a5caed1a",4246:"f59d81ac",4300:"4cd738bd",4502:"4a070847",4541:"c4c20b15",4583:"1df93b7f",4712:"842fc954",4972:"bde2094a",5331:"c16f5663",5794:"303209e1",5968:"15c5b2e6",6061:"1f391b9e",6085:"0bffd00d",6246:"498d4d26",6271:"ffd52dfa",6363:"f5546e3f",6583:"a165d0ef",6759:"f9aaae36",6875:"f760b48e",6969:"14eb3368",7098:"a7bd4aaa",8401:"17896441",8581:"935f2afb",8767:"142bacfa",8837:"9fb72dca",8962:"4f6f0beb",9048:"a94703ab",9118:"ca79eafe",9312:"602b5c67",9476:"4ac74e3d",9647:"5e95c892",9789:"0b2296e6",9814:"75a8a8f3"}[e]||e)+"."+{635:"0715ae2a",748:"58b4f9bf",1471:"d8e470f0",1563:"90121d29",1943:"4530d296",1981:"35e761f5",2237:"29ed07f9",2674:"862bdbf7",2710:"58752515",2741:"c2e474fa",2750:"b39a960b",3093:"3ae09d59",3338:"fe390bd2",3438:"e8c76029",3473:"6488b8bc",3488:"5e81d9b8",3576:"c97af649",3590:"bdaf91c1",3832:"c87ee121",3925:"96eeaa2a",4224:"02237783",4246:"1e53bf09",4300:"ac79276c",4502:"b49cf986",4541:"793e55b2",4583:"b93928f5",4712:"342fe709",4972:"e94c9456",5331:"4338ba60",5794:"23241189",5968:"571daa57",6061:"80ff34b9",6085:"094c78b4",6246:"e6624154",6271:"98e8f274",6363:"a908af2c",6583:"8616763f",6759:"f7588003",6875:"6860c039",6969:"9f439c7c",7098:"b2fb0e4e",8401:"817d95ee",8581:"bdfc3058",8767:"c1bf57ef",8837:"9aa0193b",8962:"9af595e2",9048:"d2a4c9ab",9118:"585b4089",9312:"502d2d43",9476:"a9595a26",9647:"1ae668ac",9789:"2fda82dc",9814:"473e0a69"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},r="academy:",d.l=(e,a,f,b)=>{if(t[e])t[e].push(a);else{var c,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{c.onerror=c.onload=null,clearTimeout(s);var r=t[e];if(delete t[e],c.parentNode&&c.parentNode.removeChild(c),r&&r.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=l.bind(null,c.onerror),c.onload=l.bind(null,c.onload),o&&document.head.appendChild(c)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"8401",b9a9e23a:"635","94375d41":"748",de5aeb7c:"1471",e72b9bb3:"1563","519f47fb":"1943","1be0d2c3":"1981",e829bf52:"2710","8ebf884c":"2741","356a0ac6":"2750","3f776845":"3093",b5796db6:"3338",fbacb533:"3438","3c01fd32":"3473","8cb4ad27":"3488","3987870c":"3576","578ed02f":"3590","8f9e59a2":"3832","35f8ffce":"3925",a5caed1a:"4224",f59d81ac:"4246","4cd738bd":"4300","4a070847":"4502",c4c20b15:"4541","1df93b7f":"4583","842fc954":"4712",bde2094a:"4972",c16f5663:"5331","303209e1":"5794","15c5b2e6":"5968","1f391b9e":"6061","0bffd00d":"6085","498d4d26":"6246",ffd52dfa:"6271",f5546e3f:"6363",a165d0ef:"6583",f9aaae36:"6759",f760b48e:"6875","14eb3368":"6969",a7bd4aaa:"7098","935f2afb":"8581","142bacfa":"8767","9fb72dca":"8837","4f6f0beb":"8962",a94703ab:"9048",ca79eafe:"9118","602b5c67":"9312","4ac74e3d":"9476","5e95c892":"9647","0b2296e6":"9789","75a8a8f3":"9814"}[e]||e,d.p+d.u(e)},(()=>{var e={5354:0,1869:0};d.f.j=(a,f)=>{var t=d.o(e,a)?e[a]:void 0;if(0!==t)if(t)f.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var r=new Promise(((f,r)=>t=e[a]=[f,r]));f.push(t[2]=r);var b=d.p+d.u(a),c=new Error;d.l(b,(f=>{if(d.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var r=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;c.message="Loading chunk "+a+" failed.\n("+r+": "+b+")",c.name="ChunkLoadError",c.type=r,c.request=b,t[1](c)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,f)=>{var t,r,b=f[0],c=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(t in c)d.o(c,t)&&(d.m[t]=c[t]);if(o)var i=o(d)}for(a&&a(f);n{"use strict";var e,a,f,t,r,c={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var f=d[e]={exports:{}};return c[e].call(f.exports,f,f.exports,b),f.exports}b.m=c,e=[],b.O=(a,f,t,r)=>{if(!f){var c=1/0;for(i=0;i=r)&&Object.keys(b.O).every((e=>b.O[e](f[o])))?f.splice(o--,1):(d=!1,r0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[f,t,r]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var r=Object.create(null);b.r(r);var c={};a=a||[null,f({}),f([]),f(f)];for(var d=2&t&&e;"object"==typeof d&&!~a.indexOf(d);d=f(d))Object.getOwnPropertyNames(d).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,b.d(r,c),r},b.d=(e,a)=>{for(var f in a)b.o(a,f)&&!b.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,f)=>(b.f[f](e,a),a)),[])),b.u=e=>"assets/js/"+({635:"b9a9e23a",748:"94375d41",1471:"de5aeb7c",1563:"e72b9bb3",1943:"519f47fb",1981:"1be0d2c3",2710:"e829bf52",2741:"8ebf884c",2750:"356a0ac6",3093:"3f776845",3338:"b5796db6",3438:"fbacb533",3473:"3c01fd32",3488:"8cb4ad27",3576:"3987870c",3590:"578ed02f",3832:"8f9e59a2",3925:"35f8ffce",4224:"a5caed1a",4246:"f59d81ac",4300:"4cd738bd",4502:"4a070847",4541:"c4c20b15",4583:"1df93b7f",4712:"842fc954",4972:"bde2094a",5331:"c16f5663",5794:"303209e1",5968:"15c5b2e6",6061:"1f391b9e",6085:"0bffd00d",6246:"498d4d26",6271:"ffd52dfa",6363:"f5546e3f",6583:"a165d0ef",6759:"f9aaae36",6875:"f760b48e",6969:"14eb3368",7098:"a7bd4aaa",8401:"17896441",8581:"935f2afb",8767:"142bacfa",8837:"9fb72dca",8962:"4f6f0beb",9048:"a94703ab",9118:"ca79eafe",9312:"602b5c67",9476:"4ac74e3d",9647:"5e95c892",9789:"0b2296e6",9814:"75a8a8f3"}[e]||e)+"."+{635:"0715ae2a",748:"58b4f9bf",1471:"d8e470f0",1563:"90121d29",1943:"4530d296",1981:"35e761f5",2237:"29ed07f9",2674:"862bdbf7",2710:"58752515",2741:"c2e474fa",2750:"b39a960b",3093:"3ae09d59",3338:"fe390bd2",3438:"e8c76029",3473:"6488b8bc",3488:"5e81d9b8",3576:"c97af649",3590:"bdaf91c1",3832:"c87ee121",3925:"96eeaa2a",4224:"02237783",4246:"1e53bf09",4300:"ac79276c",4502:"b49cf986",4541:"793e55b2",4583:"b93928f5",4712:"342fe709",4972:"e94c9456",5331:"4338ba60",5794:"23241189",5968:"571daa57",6061:"80ff34b9",6085:"094c78b4",6246:"e6624154",6271:"98e8f274",6363:"a908af2c",6583:"8616763f",6759:"f7588003",6875:"6860c039",6969:"9f439c7c",7098:"b2fb0e4e",8401:"817d95ee",8581:"bdfc3058",8767:"c1bf57ef",8837:"9aa0193b",8962:"9af595e2",9048:"d2a4c9ab",9118:"585b4089",9312:"502d2d43",9476:"a9595a26",9647:"1ae668ac",9789:"3da892e9",9814:"473e0a69"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},r="academy:",b.l=(e,a,f,c)=>{if(t[e])t[e].push(a);else{var d,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(s);var r=t[e];if(delete t[e],d.parentNode&&d.parentNode.removeChild(d),r&&r.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=l.bind(null,d.onerror),d.onload=l.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"8401",b9a9e23a:"635","94375d41":"748",de5aeb7c:"1471",e72b9bb3:"1563","519f47fb":"1943","1be0d2c3":"1981",e829bf52:"2710","8ebf884c":"2741","356a0ac6":"2750","3f776845":"3093",b5796db6:"3338",fbacb533:"3438","3c01fd32":"3473","8cb4ad27":"3488","3987870c":"3576","578ed02f":"3590","8f9e59a2":"3832","35f8ffce":"3925",a5caed1a:"4224",f59d81ac:"4246","4cd738bd":"4300","4a070847":"4502",c4c20b15:"4541","1df93b7f":"4583","842fc954":"4712",bde2094a:"4972",c16f5663:"5331","303209e1":"5794","15c5b2e6":"5968","1f391b9e":"6061","0bffd00d":"6085","498d4d26":"6246",ffd52dfa:"6271",f5546e3f:"6363",a165d0ef:"6583",f9aaae36:"6759",f760b48e:"6875","14eb3368":"6969",a7bd4aaa:"7098","935f2afb":"8581","142bacfa":"8767","9fb72dca":"8837","4f6f0beb":"8962",a94703ab:"9048",ca79eafe:"9118","602b5c67":"9312","4ac74e3d":"9476","5e95c892":"9647","0b2296e6":"9789","75a8a8f3":"9814"}[e]||e,b.p+b.u(e)},(()=>{var e={5354:0,1869:0};b.f.j=(a,f)=>{var t=b.o(e,a)?e[a]:void 0;if(0!==t)if(t)f.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var r=new Promise(((f,r)=>t=e[a]=[f,r]));f.push(t[2]=r);var c=b.p+b.u(a),d=new Error;b.l(c,(f=>{if(b.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var r=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;d.message="Loading chunk "+a+" failed.\n("+r+": "+c+")",d.name="ChunkLoadError",d.type=r,d.request=c,t[1](d)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,f)=>{var t,r,c=f[0],d=f[1],o=f[2],n=0;if(c.some((a=>0!==e[a]))){for(t in d)b.o(d,t)&&(b.m[t]=d[t]);if(o)var i=o(b)}for(a&&a(f);n Intro | Biotz Academy - + diff --git a/docs/Examples/MQTTX/MQTTX configuration.html b/docs/Examples/MQTTX/MQTTX configuration.html index dfebfb2..86d2628 100644 --- a/docs/Examples/MQTTX/MQTTX configuration.html +++ b/docs/Examples/MQTTX/MQTTX configuration.html @@ -4,7 +4,7 @@ MQTTX configuration | Biotz Academy - + diff --git a/docs/Examples/MQTTX/MQttx instalation.html b/docs/Examples/MQTTX/MQttx instalation.html index 6b92d2d..1dac5b3 100644 --- a/docs/Examples/MQTTX/MQttx instalation.html +++ b/docs/Examples/MQTTX/MQttx instalation.html @@ -4,7 +4,7 @@ MQttx instalation | Biotz Academy - + diff --git a/docs/Examples/MQTTX/Message.html b/docs/Examples/MQTTX/Message.html index 28e59b7..c7de72c 100644 --- a/docs/Examples/MQTTX/Message.html +++ b/docs/Examples/MQTTX/Message.html @@ -4,7 +4,7 @@ Publish data to Biotz | Biotz Academy - + diff --git a/docs/Examples/POSTMAN/Getting the token.html b/docs/Examples/POSTMAN/Getting the token.html index fc55772..a4f7dc4 100644 --- a/docs/Examples/POSTMAN/Getting the token.html +++ b/docs/Examples/POSTMAN/Getting the token.html @@ -4,7 +4,7 @@ Getting the token | Biotz Academy - + diff --git a/docs/Examples/POSTMAN/Intro.html b/docs/Examples/POSTMAN/Intro.html index d18271d..596c4cb 100644 --- a/docs/Examples/POSTMAN/Intro.html +++ b/docs/Examples/POSTMAN/Intro.html @@ -4,7 +4,7 @@ Intro | Biotz Academy - + diff --git a/docs/Examples/POSTMAN/Postman instalation.html b/docs/Examples/POSTMAN/Postman instalation.html index 0742ff0..fc3b599 100644 --- a/docs/Examples/POSTMAN/Postman instalation.html +++ b/docs/Examples/POSTMAN/Postman instalation.html @@ -4,7 +4,7 @@ Postman instalation | Biotz Academy - + diff --git a/docs/Examples/POSTMAN/Sending the request.html b/docs/Examples/POSTMAN/Sending the request.html index 75784a5..0ba7205 100644 --- a/docs/Examples/POSTMAN/Sending the request.html +++ b/docs/Examples/POSTMAN/Sending the request.html @@ -4,7 +4,7 @@ Sending the request | Biotz Academy - + diff --git a/docs/How-to guides/How to configure and trigger a remote action in devices.html b/docs/How-to guides/How to configure and trigger a remote action in devices.html index d9ac49f..da6eb37 100644 --- a/docs/How-to guides/How to configure and trigger a remote action in devices.html +++ b/docs/How-to guides/How to configure and trigger a remote action in devices.html @@ -4,7 +4,7 @@ Configure and trigger a 'remote actioning' | Biotz Academy - + diff --git a/docs/How-to guides/How to create a dashboard.html b/docs/How-to guides/How to create a dashboard.html index 366dbd9..cd78690 100644 --- a/docs/How-to guides/How to create a dashboard.html +++ b/docs/How-to guides/How to create a dashboard.html @@ -4,7 +4,7 @@ How to create a dashboard | Biotz Academy - + diff --git a/docs/How-to guides/How to create a schema.html b/docs/How-to guides/How to create a schema.html index f24d92e..2b8f3a0 100644 --- a/docs/How-to guides/How to create a schema.html +++ b/docs/How-to guides/How to create a schema.html @@ -4,7 +4,7 @@ How to create a schema | Biotz Academy - + diff --git a/docs/How-to guides/How to create and use webhooks.html b/docs/How-to guides/How to create and use webhooks.html index 384cfc6..dda5b2e 100644 --- a/docs/How-to guides/How to create and use webhooks.html +++ b/docs/How-to guides/How to create and use webhooks.html @@ -4,7 +4,7 @@ How to Create and Use Webhooks | Biotz Academy - + @@ -38,7 +38,9 @@

The character .
  • The actual alarm payload in JSON (the body of the POST request)
  • -

    And then generating an HMAC-SHA256 hash of the concatenation using the webhook secret key.