[{"data":1,"prerenderedAt":1347},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms\u002Fdata-collection":488,"\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms\u002Fdata-collection-surround":1342},[4,326,444,470],{"title":5,"path":6,"stem":7,"children":8,"page":191},"Docs","\u002Fdocs","1.docs",[9,32,62,116,138,192,262,268,292],{"title":10,"path":11,"stem":12,"children":13,"icon":15},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[14,16,20,24,28],{"title":10,"path":11,"stem":12,"icon":15},"i-lucide-house",{"title":17,"path":18,"stem":19},"Register a User","\u002Fdocs\u002Fgetting-started\u002Fregister-a-user","1.docs\u002F1.getting-started\u002F2.register-a-user",{"title":21,"path":22,"stem":23},"Platform Overview","\u002Fdocs\u002Fgetting-started\u002Fplatform-overview","1.docs\u002F1.getting-started\u002F3.platform-overview",{"title":25,"path":26,"stem":27},"Create an Organisation","\u002Fdocs\u002Fgetting-started\u002Fcreate-an-organisation","1.docs\u002F1.getting-started\u002F4.create-an-organisation",{"title":29,"path":30,"stem":31},"Quickstarts","\u002Fdocs\u002Fgetting-started\u002Fquickstarts","1.docs\u002F1.getting-started\u002F5.quickstarts",{"title":33,"path":34,"stem":35,"children":36},"Organisation Administration","\u002Fdocs\u002Finfuse-cloud","1.docs\u002F2.infuse-cloud\u002F1.index",[37,38,42,46,50,54,58],{"title":33,"path":34,"stem":35},{"title":39,"path":40,"stem":41},"Create or Switch Organisations","\u002Fdocs\u002Finfuse-cloud\u002Fcreate-or-switch-organisations","1.docs\u002F2.infuse-cloud\u002F2.create-or-switch-organisations",{"title":43,"path":44,"stem":45},"Organisation Profile","\u002Fdocs\u002Finfuse-cloud\u002Forganisation-profile","1.docs\u002F2.infuse-cloud\u002F3.organisation-profile",{"title":47,"path":48,"stem":49},"Members and Invitations","\u002Fdocs\u002Finfuse-cloud\u002Fmembers-and-invitations","1.docs\u002F2.infuse-cloud\u002F4.members-and-invitations",{"title":51,"path":52,"stem":53},"Member Roles","\u002Fdocs\u002Finfuse-cloud\u002Fmember-roles","1.docs\u002F2.infuse-cloud\u002F5.member-roles",{"title":55,"path":56,"stem":57},"API Access","\u002Fdocs\u002Finfuse-cloud\u002Fapi-access","1.docs\u002F2.infuse-cloud\u002F6.api-access",{"title":59,"path":60,"stem":61},"Webhooks","\u002Fdocs\u002Finfuse-cloud\u002Fwebhooks","1.docs\u002F2.infuse-cloud\u002F7.webhooks",{"title":63,"path":64,"stem":65,"children":66},"Infuse-IoT Cloud","\u002Fdocs\u002Finfuse-iot-cloud","1.docs\u002F3.infuse-iot-cloud\u002F1.index",[67,68,72,76,80,84,88,92,96,100,104,108,112],{"title":63,"path":64,"stem":65},{"title":69,"path":70,"stem":71},"Provisioning","\u002Fdocs\u002Finfuse-iot-cloud\u002Fprovisioning","1.docs\u002F3.infuse-iot-cloud\u002F10.provisioning",{"title":73,"path":74,"stem":75},"Connectivity","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconnectivity","1.docs\u002F3.infuse-iot-cloud\u002F11.connectivity",{"title":77,"path":78,"stem":79},"Definitions","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdefinitions","1.docs\u002F3.infuse-iot-cloud\u002F12.definitions",{"title":81,"path":82,"stem":83},"Telemetry","\u002Fdocs\u002Finfuse-iot-cloud\u002Ftelemetry","1.docs\u002F3.infuse-iot-cloud\u002F13.telemetry",{"title":85,"path":86,"stem":87},"Console","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconsole","1.docs\u002F3.infuse-iot-cloud\u002F2.console",{"title":89,"path":90,"stem":91},"Concepts","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconcepts","1.docs\u002F3.infuse-iot-cloud\u002F3.concepts",{"title":93,"path":94,"stem":95},"Boards","\u002Fdocs\u002Finfuse-iot-cloud\u002Fboards","1.docs\u002F3.infuse-iot-cloud\u002F4.boards",{"title":97,"path":98,"stem":99},"Networks","\u002Fdocs\u002Finfuse-iot-cloud\u002Fnetworks","1.docs\u002F3.infuse-iot-cloud\u002F5.networks",{"title":101,"path":102,"stem":103},"Devices","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdevices","1.docs\u002F3.infuse-iot-cloud\u002F6.devices",{"title":105,"path":106,"stem":107},"Device Configuration","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdevice-configuration","1.docs\u002F3.infuse-iot-cloud\u002F7.device-configuration",{"title":109,"path":110,"stem":111},"Applications and Releases","\u002Fdocs\u002Finfuse-iot-cloud\u002Fapplications-and-releases","1.docs\u002F3.infuse-iot-cloud\u002F8.applications-and-releases",{"title":113,"path":114,"stem":115},"Commands","\u002Fdocs\u002Finfuse-iot-cloud\u002Fcommands","1.docs\u002F3.infuse-iot-cloud\u002F9.commands",{"title":117,"path":118,"stem":119,"children":120},"Infuse-DB","\u002Fdocs\u002Finfuse-db","1.docs\u002F4.infuse-db\u002F1.index",[121,122,126,130,134],{"title":117,"path":118,"stem":119},{"title":123,"path":124,"stem":125},"Datasets","\u002Fdocs\u002Finfuse-db\u002Fdatasets","1.docs\u002F4.infuse-db\u002F2.datasets",{"title":127,"path":128,"stem":129},"Ingestion","\u002Fdocs\u002Finfuse-db\u002Fingestion","1.docs\u002F4.infuse-db\u002F3.ingestion",{"title":131,"path":132,"stem":133},"Querying","\u002Fdocs\u002Finfuse-db\u002Fquerying","1.docs\u002F4.infuse-db\u002F4.querying",{"title":135,"path":136,"stem":137},"Retention","\u002Fdocs\u002Finfuse-db\u002Fretention","1.docs\u002F4.infuse-db\u002F5.retention",{"title":139,"path":140,"stem":141,"children":142},"Embedded Tools","\u002Fdocs\u002Finfuse-iot-sdk","1.docs\u002F4.infuse-iot-sdk\u002F1.index",[143,144,148],{"title":139,"path":140,"stem":141},{"title":145,"path":146,"stem":147},"Infuse-IoT SDK","\u002Fdocs\u002Finfuse-iot-sdk\u002Fsdk-reference","1.docs\u002F4.infuse-iot-sdk\u002F2.sdk-reference",{"title":149,"path":150,"stem":151,"children":152,"page":191},"Python Tools","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools",[153,156,159,163,167,171,175,179,183,187],{"title":149,"path":154,"stem":155},"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fpython-tools","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F01.python-tools",{"title":113,"path":157,"stem":158},"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fcommands","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F02.commands",{"title":160,"path":161,"stem":162},"Credential Management","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fcredentials","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F03.credentials",{"title":164,"path":165,"stem":166},"Gateways","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fgateways","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F04.gateways",{"title":168,"path":169,"stem":170},"Infuse-IoT Cloud support","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fcloud","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F05.cloud",{"title":172,"path":173,"stem":174},"Provision Hardware","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fhardware-provisioning","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F06.hardware-provisioning",{"title":176,"path":177,"stem":178},"TDF Viewers","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Ftdf-viewers","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F07.tdf-viewers",{"title":180,"path":181,"stem":182},"RPC Runners","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Frpc-runner","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F08.rpc-runner",{"title":184,"path":185,"stem":186},"Over-the-Air Upgrades","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fota-upgrades","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F09.ota-upgrades",{"title":188,"path":189,"stem":190},"Bluetooth Log Viewer","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fble-log-viewer","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F10.ble-log-viewer",false,{"title":193,"path":194,"stem":195,"children":196},"Infuse-Marketplace","\u002Fdocs\u002Fmarketplace","1.docs\u002F5.marketplace\u002F1.index",[197,198,202,206,232],{"title":193,"path":194,"stem":195},{"title":199,"path":200,"stem":201},"Infuse-Marketplace Instances","\u002Fdocs\u002Fmarketplace\u002Finstances","1.docs\u002F5.marketplace\u002F2.instances",{"title":203,"path":204,"stem":205},"Infuse-Marketplace Roles","\u002Fdocs\u002Fmarketplace\u002Froles","1.docs\u002F5.marketplace\u002F3.roles",{"title":207,"path":208,"stem":209,"children":210},"Infuse-Marketplace Developers","\u002Fdocs\u002Fmarketplace\u002Fdevelopers","1.docs\u002F5.marketplace\u002Fdevelopers\u002F1.index",[211,212,216,220,224,228],{"title":207,"path":208,"stem":209},{"title":213,"path":214,"stem":215},"Create an App or Algorithm","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fcreate-product","1.docs\u002F5.marketplace\u002Fdevelopers\u002F2.create-product",{"title":217,"path":218,"stem":219},"Upload Assets","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fupload-assets","1.docs\u002F5.marketplace\u002Fdevelopers\u002F3.upload-assets",{"title":221,"path":222,"stem":223},"Releases and Versions","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Freleases-and-versions","1.docs\u002F5.marketplace\u002Fdevelopers\u002F4.releases-and-versions",{"title":225,"path":226,"stem":227},"Pricing","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fpricing","1.docs\u002F5.marketplace\u002Fdevelopers\u002F5.pricing",{"title":229,"path":230,"stem":231},"Publish an App or Algorithm","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fpublish-product","1.docs\u002F5.marketplace\u002Fdevelopers\u002F6.publish-product",{"title":233,"path":234,"stem":235,"children":236},"Infuse-Marketplace Providers","\u002Fdocs\u002Fmarketplace\u002Fproviders","1.docs\u002F5.marketplace\u002Fproviders\u002F1.index",[237,238,242,246,250,254,258],{"title":233,"path":234,"stem":235},{"title":239,"path":240,"stem":241},"Discover Apps and Algorithms","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fdiscover-products","1.docs\u002F5.marketplace\u002Fproviders\u002F2.discover-products",{"title":243,"path":244,"stem":245},"Create and Manage Listings","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fcreate-listings","1.docs\u002F5.marketplace\u002Fproviders\u002F3.create-listings",{"title":247,"path":248,"stem":249},"Build a Storefront","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fbuild-a-storefront","1.docs\u002F5.marketplace\u002Fproviders\u002F4.build-a-storefront",{"title":251,"path":252,"stem":253},"Checkout Flow","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fcheckout-flow","1.docs\u002F5.marketplace\u002Fproviders\u002F5.checkout-flow",{"title":255,"path":256,"stem":257},"Purchases","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fpurchases","1.docs\u002F5.marketplace\u002Fproviders\u002F6.purchases",{"title":259,"path":260,"stem":261},"Install Purchased Apps and Algorithms","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Finstall-purchased-products","1.docs\u002F5.marketplace\u002Fproviders\u002F7.install-purchased-products",{"title":263,"path":264,"stem":265,"children":266},"Infuse-Analytics","\u002Fdocs\u002Finfuse-analytics","1.docs\u002F6.infuse-analytics\u002F1.index",[267],{"title":263,"path":264,"stem":265},{"title":89,"path":269,"stem":270,"children":271},"\u002Fdocs\u002Fconcepts","1.docs\u002F7.concepts\u002F1.index",[272,273,277,281,284,288],{"title":89,"path":269,"stem":270},{"title":274,"path":275,"stem":276},"Organisations","\u002Fdocs\u002Fconcepts\u002Forganisations","1.docs\u002F7.concepts\u002F2.organisations",{"title":278,"path":279,"stem":280},"Products","\u002Fdocs\u002Fconcepts\u002Fproducts","1.docs\u002F7.concepts\u002F3.products",{"title":101,"path":282,"stem":283},"\u002Fdocs\u002Fconcepts\u002Fdevices","1.docs\u002F7.concepts\u002F5.devices",{"title":285,"path":286,"stem":287},"Entitlements","\u002Fdocs\u002Fconcepts\u002Fentitlements","1.docs\u002F7.concepts\u002F6.entitlements",{"title":289,"path":290,"stem":291},"Infuse-Marketplace Model","\u002Fdocs\u002Fconcepts\u002Fmarketplace-model","1.docs\u002F7.concepts\u002F7.marketplace-model",{"title":293,"path":294,"stem":295,"children":296},"IAM and Access","\u002Fdocs\u002Fiam-and-access","1.docs\u002F8.iam-and-access\u002F1.index",[297,298,302,306,310,314,318,322],{"title":293,"path":294,"stem":295},{"title":299,"path":300,"stem":301},"Users, Groups, and Roles","\u002Fdocs\u002Fiam-and-access\u002Fusers-groups-and-roles","1.docs\u002F8.iam-and-access\u002F2.users-groups-and-roles",{"title":303,"path":304,"stem":305},"Permissions and Resource Limits","\u002Fdocs\u002Fiam-and-access\u002Fpermissions","1.docs\u002F8.iam-and-access\u002F3.permissions",{"title":307,"path":308,"stem":309},"Service Accounts","\u002Fdocs\u002Fiam-and-access\u002Fservice-accounts","1.docs\u002F8.iam-and-access\u002F4.service-accounts",{"title":311,"path":312,"stem":313},"API Keys","\u002Fdocs\u002Fiam-and-access\u002Fapi-tokens","1.docs\u002F8.iam-and-access\u002F5.api-tokens",{"title":315,"path":316,"stem":317},"Token Exchange","\u002Fdocs\u002Fiam-and-access\u002Ftoken-exchange","1.docs\u002F8.iam-and-access\u002F6.token-exchange",{"title":319,"path":320,"stem":321},"Rotate and Revoke Credentials","\u002Fdocs\u002Fiam-and-access\u002Frotate-and-revoke-credentials","1.docs\u002F8.iam-and-access\u002F7.rotate-and-revoke-credentials",{"title":323,"path":324,"stem":325},"Troubleshooting Auth","\u002Fdocs\u002Fiam-and-access\u002Ftroubleshooting-auth","1.docs\u002F8.iam-and-access\u002F8.troubleshooting-auth",{"title":327,"path":328,"stem":329,"children":330},"Guides","\u002Fguides","2.guides\u002F1.index",[331,332,342,352,424,434],{"title":327,"path":328,"stem":329},{"title":333,"path":334,"stem":335,"children":336},"Access Guides","\u002Fguides\u002Faccess","2.guides\u002Faccess\u002F1.index",[337,338],{"title":333,"path":334,"stem":335},{"title":339,"path":340,"stem":341},"Create an API Key","\u002Fguides\u002Faccess\u002Fcreate-an-api-token","2.guides\u002Faccess\u002F2.create-an-api-token",{"title":343,"path":344,"stem":345,"children":346},"Data Guides","\u002Fguides\u002Fdata","2.guides\u002Fdata\u002F1.index",[347,348],{"title":343,"path":344,"stem":345},{"title":349,"path":350,"stem":351},"Stream IoT Data to Infuse-DB","\u002Fguides\u002Fdata\u002Fstream-iot-data-to-infuse-db","2.guides\u002Fdata\u002F2.stream-iot-data-to-infuse-db",{"title":353,"path":354,"stem":355,"children":356},"Embedded SDK Guides","\u002Fguides\u002Fembedded-iot","2.guides\u002Fembedded-iot\u002F1.index",[357,358,362,384,394],{"title":353,"path":354,"stem":355},{"title":359,"path":360,"stem":361},"Python Tools Setup & Install","\u002Fguides\u002Fembedded-iot\u002Fpython-setup-install","2.guides\u002Fembedded-iot\u002F2.python-setup-install",{"title":363,"path":364,"stem":365,"children":366},"Creating Embedded Algorithms","\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms","2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F1.index",[367,368,372,376,380],{"title":363,"path":364,"stem":365},{"title":369,"path":370,"stem":371},"Data collection","\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms\u002Fdata-collection","2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F2.data-collection",{"title":373,"path":374,"stem":375},"Dataset Creation","\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms\u002Fdataset-creation","2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F3.dataset-creation",{"title":377,"path":378,"stem":379},"Training Models","\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms\u002Ftraining-models","2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F4.training-models",{"title":381,"path":382,"stem":383},"Deploying Models","\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms\u002Fdeploy","2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F5.deploy",{"title":385,"path":386,"stem":387,"children":388},"Hardware Guides","\u002Fguides\u002Fembedded-iot\u002Fhardware","2.guides\u002Fembedded-iot\u002Fhardware\u002F1.index",[389,390],{"title":385,"path":386,"stem":387},{"title":391,"path":392,"stem":393},"nRF54L15 Tag","\u002Fguides\u002Fembedded-iot\u002Fhardware\u002Fnrf54l15-tag","2.guides\u002Fembedded-iot\u002Fhardware\u002F2.nrf54l15-tag",{"title":395,"path":396,"stem":397,"children":398},"How To's","\u002Fguides\u002Fembedded-iot\u002Fhow-tos","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F1.index",[399,400,404,408,412,416,420],{"title":395,"path":396,"stem":397},{"title":401,"path":402,"stem":403},"Device Provisioning","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Fprovision-a-tag","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F01.provision-a-tag",{"title":405,"path":406,"stem":407},"Setup and Flash a gateway","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Fflash-a-gateway","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F02.flash-a-gateway",{"title":409,"path":410,"stem":411},"Connecting to a gateway","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Fconnect-gateway","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F03.connect-gateway",{"title":413,"path":414,"stem":415},"How to physically connect a device","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Fdevice-logs","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F03.device-logs",{"title":417,"path":418,"stem":419},"Configuring the default network","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Fconfigure-network","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F04.configure-network",{"title":421,"path":422,"stem":423},"Device's Infuse ID","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Ftag-infuse-id","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F05.tag-infuse-id",{"title":425,"path":426,"stem":427,"children":428},"IoT Guides","\u002Fguides\u002Fiot","2.guides\u002Fiot\u002F1.index",[429,430],{"title":425,"path":426,"stem":427},{"title":431,"path":432,"stem":433},"Connect an IoT Device","\u002Fguides\u002Fiot\u002Fconnect-a-device","2.guides\u002Fiot\u002F2.connect-a-device",{"title":435,"path":436,"stem":437,"children":438},"Infuse-Marketplace Guides","\u002Fguides\u002Fmarketplace","2.guides\u002Fmarketplace\u002F1.index",[439,440],{"title":435,"path":436,"stem":437},{"title":441,"path":442,"stem":443},"Build an Infuse-Marketplace Storefront","\u002Fguides\u002Fmarketplace\u002Fbuild-a-storefront","2.guides\u002Fmarketplace\u002F2.build-a-storefront",{"title":445,"path":446,"stem":447,"children":448},"API Reference","\u002Fapi-reference","3.api-reference\u002F1.index",[449,450,454,458,462,466],{"title":445,"path":446,"stem":447},{"title":451,"path":452,"stem":453},"Admin API","\u002Fapi-reference\u002Fcloud","3.api-reference\u002F2.cloud",{"title":455,"path":456,"stem":457},"Infuse-Marketplace API","\u002Fapi-reference\u002Fmarketplace","3.api-reference\u002F3.marketplace",{"title":459,"path":460,"stem":461},"IAM API","\u002Fapi-reference\u002Fiam","3.api-reference\u002F4.iam",{"title":463,"path":464,"stem":465},"Infuse-IoT Cloud API","\u002Fapi-reference\u002Fiot","3.api-reference\u002F5.iot",{"title":467,"path":468,"stem":469},"Infuse-DB API","\u002Fapi-reference\u002Fdb","3.api-reference\u002F6.db",{"title":471,"path":472,"stem":473,"children":474},"Resources","\u002Fresources","4.resources\u002F1.index",[475,476,480,484],{"title":471,"path":472,"stem":473},{"title":477,"path":478,"stem":479},"SDKs","\u002Fresources\u002Fsdks","4.resources\u002F2.sdks",{"title":481,"path":482,"stem":483},"OpenAPI Specs","\u002Fresources\u002Fopenapi-specs","4.resources\u002F3.openapi-specs",{"title":485,"path":486,"stem":487},"Examples","\u002Fresources\u002Fexamples","4.resources\u002F4.examples",{"id":489,"title":369,"body":490,"description":1335,"extension":1336,"links":1337,"meta":1338,"navigation":1339,"path":370,"seo":1340,"stem":371,"__hash__":1341},"docs\u002F2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F2.data-collection.md",{"type":491,"value":492,"toc":1313},"minimark",[493,497,525,1309],[494,495,496],"p",{},"The next step is to collect data to form a dataset. This entails:",[498,499,500,504,507,510,513,516,519,522],"ol",{},[501,502,503],"li",{},"Using a board with an accelerometer running Infuse-IoT firmware.",[501,505,506],{},"Build and Flash the tag with a suitable accelerometer firmware.",[501,508,509],{},"During an experiment, log accelerometer values to the data logger or the GATT peripheral",[501,511,512],{},"and utilise Python tools to annotate the raw data.",[501,514,515],{},"Use Python tools to download the data logger data, or save the live GATT peripheral data",[501,517,518],{},"Preprocess data (calculate the magnitudes, etc)",[501,520,521],{},"Sample windows of data based on events for a balance dataset",[501,523,524],{},"Save the dataset",[526,527,529,534,537,579,582,621,624,631,657,678,682,689,694,698,705,709,716,758,763,766,793,797,804,809,822,826,829,1222,1226,1229,1303,1306],"steps",{"level":528},"2",[530,531,533],"h2",{"id":532},"boards-and-devices","Boards and devices",[494,535,536],{},"When selecting a board to use it must:",[538,539,540,543],"ul",{},[501,541,542],{},"Have an accelerometer (or other sensor to provide suitable data) and",[501,544,545,546],{},"Have a way to log the sensor data either via\n",[538,547,548,565],{},[501,549,550,551,558,559],{},"The ",[552,553,557],"a",{"href":554,"rel":555},"https:\u002F\u002Fdocs.dev.infuse-iot.com\u002Flatest\u002Fembedded\u002Fapp_features\u002Fdata_logger.html",[556],"nofollow","data logger"," subsystem, or\n",[560,561,562],"warning",{},[494,563,564],{},"Using the data logger is preferred, however ensure the capacity is suitable for the sensor and experiment. For example 100Hz accelerometer data occupies at least 72kB per hour. Ensure a suitable size is available to prevent existing data being overwritten.",[501,566,567,568,573,574],{},"A reliable ",[552,569,572],{"href":570,"rel":571},"https:\u002F\u002Fdocs.dev.infuse-iot.com\u002Flatest\u002Fembedded\u002Fapp_features\u002Fepacket.html#interfaces",[556],"ePacket interface","\nlike Serial or Bluetooth to stream the data live.\n",[560,575,576],{},[494,577,578],{},"Although a Serial link is more reliable, a cable may change the movement profile.\nUtilising the bluetooth is the most convenient method to stream the data wirelessly.",[494,580,581],{},"Suitable boards include the Thingy:52\u002F53\u002F91 and the nRF54L15 Tag.",[583,584,586,610],"tabs",{"sync":585},"tagBoard",[587,588,590,607],"tabs-item",{"label":589},"Default",[494,591,592,593,597,598,601,602,606],{},"For this demo, the ",[552,594,391],{"href":595,"rel":596},"https:\u002F\u002Fwww.nordicsemi.com\u002FProducts\u002FDevelopment-hardware\u002FnRF54L15-Tag",[556],"\nwill be used as the sensor board.",[599,600],"br",{},"The Zephyr board target is ",[603,604,605],"code",{},"nrf54l15tag\u002Fnrf54l15\u002Fcpuapp",".",[494,608,609],{},"Alternately, you can use a suitable Custom Tag Board instead.",[587,611,613,616],{"label":612},"Custom Tag Board",[494,614,615],{},"Enter the board name\u002Ftarget of the custom board to update commands below",[617,618],"config-input",{"default":605,"label":619,"name":620},"Tag target name","tagTarget",[622,623],"hr",{},[494,625,626,627,630],{},"A second board will be required to be used as a gateway (unless using ",[603,628,629],{},"infuse native_bt",").\nThis just requires a board with Bluetooth (e.g. nRF52840DK, nRF54L15DK, etc.)",[583,632,634,647],{"sync":633},"gatewayBoard",[587,635,636],{"label":589},[494,637,592,638,643,644,606],{},[552,639,642],{"href":640,"rel":641},"https:\u002F\u002Fwww.nordicsemi.com\u002FProducts\u002FDevelopment-hardware\u002FnRF54L15-DK",[556],"nRF54L15DK","\nwill be used as the gateway board. In Zephyr this target is referred to as ",[603,645,646],{},"nrf54l15dk\u002Fnrf54l15\u002Fcpuapp",[587,648,650,653],{"label":649},"Custom Gateway Board",[494,651,652],{},"If using a custom board for the gateway device, enter the board name to update commands below",[617,654],{"default":646,"label":655,"name":656},"Gatway target name","gatewayTarget",[658,659,660,670,675],"tip",{},[494,661,662,663,666,667,606],{},"When using the nRF54L15 Tag as the sensor board and nRF54L15DK as the gateway,\nto avoid draining the non-rechargeable CR2032 battery,\nthe nRF54l15 Tag can be powered by the DK while connected via the JTAG programming port.\nThis can be done by connecting a suitable power pin (Port P2's ",[603,664,665],{},"VDD:IO",") to the ",[603,668,669],{},"VDD SWD0",[560,671,672],{},[494,673,674],{},"Do not use the DK to supply power to the nRF54L15 tag while the 3V CR2032 Coin Cell battery is connected",[494,676,677],{},"This avoid draining the battery while programming, testing or downloading logger data over Bluetooth.",[530,679,681],{"id":680},"hardware-preparation","Hardware Preparation",[494,683,684,685,688],{},"Ensure both devices have been provisioned by following the ",[552,686,687],{"href":402},"provisioning guide",".\nThis step can be skipped if both devices are already provisioned.",[658,690,691],{},[494,692,693],{},"If using the nF54L15DK, ensure the nRF54L15 Tag is not plugged in while trying to provision or program the nF54L15DK.",[530,695,697],{"id":696},"build-and-flash-the-gateway","Build and Flash the Gateway",[494,699,700,701,704],{},"With your gateway device connected, follow the steps in ",[552,702,703],{"href":406},"Flashing a Gateway","\nto program your gateway if it is not already running Gateway firmware.",[530,706,708],{"id":707},"build-and-flash-the-tag","Build and Flash the tag",[494,710,711,712,715],{},"Then build the ",[603,713,714],{},"task_runner: imu"," application sample for the tag:",[583,717,718,751],{"sync":585},[587,719,720],{"label":589},[721,722,727],"pre",{"className":723,"code":724,"language":725,"meta":726,"style":726},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","west build -b nrf54l15tag\u002Fnrf54l15\u002Fcpuapp infuse-sdk\u002Fsamples\u002Ftask_runner\u002Fimu\n","bash","",[603,728,729],{"__ignoreMap":726},[730,731,734,738,742,745,748],"span",{"class":732,"line":733},"line",1,[730,735,737],{"class":736},"sBMFI","west",[730,739,741],{"class":740},"sfazB"," build",[730,743,744],{"class":740}," -b",[730,746,747],{"class":740}," nrf54l15tag\u002Fnrf54l15\u002Fcpuapp",[730,749,750],{"class":740}," infuse-sdk\u002Fsamples\u002Ftask_runner\u002Fimu\n",[587,752,754],{"label":753},"Custom Tag",[755,756],"dynamic-block",{"language":725,"template":757},"west build -b {tagTarget} infuse-sdk\u002Fsamples\u002Ftask_runner\u002Fimu\n",[658,759,760],{},[494,761,762],{},"To program the nRF54L15 Tag, keep the gateway connected and insert the nRF54L15 Tag into the \"Debug Out\" port.",[494,764,765],{},"And flash the tag with the following command.",[583,767,768,788],{"sync":585},[587,769,770],{"label":589},[721,771,773],{"className":723,"code":772,"language":725,"meta":726,"style":726},"west flash -d build\u002Fnrf54l15tag\u002Fnrf54l15\u002Fcpuapp\u002Fimu\n",[603,774,775],{"__ignoreMap":726},[730,776,777,779,782,785],{"class":732,"line":733},[730,778,737],{"class":736},[730,780,781],{"class":740}," flash",[730,783,784],{"class":740}," -d",[730,786,787],{"class":740}," build\u002Fnrf54l15tag\u002Fnrf54l15\u002Fcpuapp\u002Fimu\n",[587,789,790],{"label":753},[755,791],{"language":725,"template":792},"west flash -d build\u002F{tagTarget}\u002Fimu\n",[530,794,796],{"id":795},"prepare-your-gateway","Prepare your Gateway",[494,798,799,800,803],{},"Follow the ",[552,801,802],{"href":410},"guide to connect to your gateway"," using the Python Tools.",[658,805,806],{},[494,807,808],{},"The nRF54L15DK will appear as a \"Serial (UART\u002FUSB)\" device.",[658,810,811],{},[494,812,813,814,816,817,821],{},"Alternately, connect directly to the tag if using ",[603,815,629],{}," See\n",[552,818,820],{"href":819},"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fgateways#native-bluetooth","Native Bluetooth","\nfor more details.",[530,823,825],{"id":824},"prepare-for-an-experiment","Prepare for an experiment",[494,827,828],{},"Before we can run the experiment there's a few steps to take to get ready beforehand.",[526,830,832,837,844,847,853,857,860,868,871,874,877,966,970,973,983,990,1001,1006,1009,1026,1030,1033,1048,1053,1057,1060,1086,1089,1097,1100,1103,1110,1118,1124,1132,1136,1143,1146,1154,1178,1185,1197,1211,1214],{"level":831},"3",[833,834,836],"h3",{"id":835},"about-your-tag","About your Tag",[494,838,839,840,843],{},"To capture raw data and send annotate data to the tag we will need to be able to connect and run commands on the tag.\nTo do this we will need to know the tag's Infuse ID. Follow ",[552,841,842],{"href":422},"these instructions","\nto get the tag's Infuse ID.",[494,845,846],{},"You can also enter it below to substitute it into subsequent commands.",[617,848],{"default":849,"label":850,"name":851,"type":852},"0x123456789ABCDEF","Tag's Infuse ID (hex)","infuseId","text",[833,854,856],{"id":855},"data-collection","Data Collection",[494,858,859],{},"While running an experiment we need to save the raw sensor data during the experiment.\nThis leaves us with two main options:",[538,861,862,865],{},[501,863,864],{},"Storing raw sensor data locally on the tag's local flash (preferably SD card or external flash).",[501,866,867],{},"Streaming the raw sensor data live over Bluetooth (or serial).",[494,869,870],{},"Streaming the data may be more simple, but can be susceptible to data loss in the case of signal interference or range constraints.\nConversely, storing the data on the tag is more reliable, however getting the data off the tag requires a bit more effort.",[494,872,873],{},"For this demonstration, we will use the streaming approach, especially since the nRF54L15 Tag does not\nhave external flash loaded by default, limiting how much accelerometer data can be recorded.",[494,875,876],{},"We can also try this out ahead of the experiment:",[583,878,880,959],{"sync":879},"dataLogging",[587,881,884,887,890,895,898,901,904,911,923],{"label":882,"icon":883},"Streaming data Live","i-lucide-bluetooth",[494,885,886],{},"With your gateway connected and running (ensuring the Python Gateway script is also running)",[494,888,889],{},"Choose a suitable location to save the logs:",[617,891],{"default":892,"label":893,"name":894,"type":852},"~\u002Fcsv_data","Folder path to save to","savePath",[494,896,897],{},"And run the following command (in another terminal) to connect to the Tag,\nstart streaming accelerometer data and saving it to\nyour machine:",[755,899],{"language":725,"template":900},"infuse bt_log --id {infuseId} --csv {savePath} --data\n",[494,902,903],{},"Once connected, there should be TDF messages appearing in the terminal, something similar to:",[721,905,909],{"className":906,"code":908,"language":852},[907],"language-text","  [11:44:12.950] Connected to 123456789ABCDEF (DATA)\n  Opening new ~\u002Fcsv_data\u002F123456789ABCDEF_ACC_4G.csv\n  1581889511.712 TDF: ACC_4G[10]\n  Opening new ~\u002Fcsv_data\u002F123456789ABCDEF_BATTERY_STATE.csv\n  1581889512.725 TDF: BATTERY_STATE\n  1581889511.895 TDF: ACC_4G[18]\n  1581889512.232 TDF: ACC_4G[32]\n  1581889512.837 TDF: ACC_4G[2]\n  1581889512.857 TDF: ACC_4G[29]\n  1581889513.395 TDF: ACC_4G[23]\n",[603,910,908],{"__ignoreMap":726},[494,912,913,914,917,918,922],{},"This will create a new ",[603,915,916],{},".csv"," file in ",[919,920],"dynamic-snippet",{"template":921},"{savePath}"," for each type of TDF.\nThis includes:",[538,924,925,932,939],{},[501,926,927,928,931],{},"Accelerometer Data (",[919,929],{"template":930},"{infuseId}_ACC_XG.csv",", where X is 2, 4, 8, or 16)",[501,933,934,935,938],{},"Annotations (",[919,936],{"template":937},"{infuseId}_ANNOTATION.csv",")",[501,940,941,942,945,946],{},"Battery Voltages (",[919,943],{"template":944},"{infuseId}_BATTERY_STATE.csv",")\nand more.\n",[658,947,948],{},[494,949,950,951,955,956,606],{},"This tool will continue to log new data until you close it with ",[952,953],"kbd",{"value":954},"meta"," ",[952,957],{"value":958},"c",[587,960,963],{"label":961,"icon":962},"Data Logger","i-lucide-hard-drive",[494,964,965],{},"Coming Soon",[833,967,969],{"id":968},"annotation-labels","Annotation Labels",[494,971,972],{},"While recording the raw data, we will want to send annotations to indicate that this raw data is useful and what was occuring.\nThis will become the labels in the labelled dataset.",[494,974,975,976,979,980,982],{},"This can be done via the ",[603,977,978],{},"annotation"," RPC (Command),\nwhich logs a timestamped ",[603,981,978],{}," TDF (Sensor data).",[494,984,985,986,989],{},"To simplify the process the ",[603,987,988],{},"infuse annotate_events"," tool can be used. It simplifies:",[538,991,992,995,998],{},[501,993,994],{},"Handling timing between the two systems when creating annotations to minimise delay.",[501,996,997],{},"Maintaining a constant connection (to reduce down time connecting to the device).",[501,999,1000],{},"Pre-configurable or manually typed labels.",[1002,1003,1005],"h4",{"id":1004},"time-configuration","Time Configuration",[494,1007,1008],{},"Because many Infuse-IoT embedded devices are not networked, they do not always have a method to obtain the current\ntime and even if they do, it will drift during operation.\nIn this demo to keep things simple we will use the default behaviour which will prompt users to set the device time\nbefore an experiment.\nThis is recommended since it improves the tool's reliability.",[658,1010,1011,1014],{},[494,1012,1013],{},"Depending on the circumstances of the experiment, the tool can be configured to forcible set, or skip\nsetting the device time.",[560,1015,1016],{},[494,1017,1018,1019,1021,1022,1025],{},"If the tag's time is not set altogether, it can cause the tool to hang.",[599,1020],{},"\nOnly use ",[603,1023,1024],{},"--skip-time"," if you know what you're doing.",[1002,1027,1029],{"id":1028},"loggers","Loggers",[494,1031,1032],{},"When we send the annotation we need that to be saved somewhere ideally alongside our data.\nThis could either be on the device (on either the onboard or removeable storage) or sent to a different device (over Bluetooth, UDP or Serial).",[494,1034,1035,1036,1039,1040,1043,1044,1047],{},"For the nRF54L15 Tag, we will be streaming the raw data over Bluetooth, so the easiest way to log this data will be over the Bluetooth interface by providing the ",[603,1037,1038],{},"--gatt"," argument.\nHowever, if utilising the on device storage, ",[603,1041,1042],{},"--onboard"," or ",[603,1045,1046],{},"--external"," arguments can be used to store data to the corresponding onboard or removeable flash loggers.",[494,1049,1050,1051,606],{},"For the nRF52L15 Tag, streaming the data will require annotations to be sent over the Bluetooth interface using ",[603,1052,1038],{},[1002,1054,1056],{"id":1055},"labels","Labels",[494,1058,1059],{},"Before we can send annotations to the device, we need a set of labels we want to classify.\nThis can be whatever we want such as the behaviours we're aiming to classify such as:",[538,1061,1062,1065,1068,1071,1074,1077,1080,1083],{},[501,1063,1064],{},"Swipe right",[501,1066,1067],{},"Swipe left",[501,1069,1070],{},"Double shake",[501,1072,1073],{},"Double tap",[501,1075,1076],{},"Rotation clockwise",[501,1078,1079],{},"Rotation counter-clockwise",[501,1081,1082],{},"Idle",[501,1084,1085],{},"Unknown",[494,1087,1088],{},"However, the Nordic Edge-AI Lab requires datasets to be formatted in a particular way.\nRather than having a window of time series data labelled as a specific event, Nordic Edge AI lab's datasets require:",[538,1090,1091,1094],{},[501,1092,1093],{},"A label for each time series sample (not window).",[501,1095,1096],{},"Option to provide an additional metadata field for the recording window.",[494,1098,1099],{},"This provides some interesting optimisations such as applying sliding windows during the recording window, which\ncan help the training process to accomodate with the fact that windows of data at runtime are random (not perfectly aligned to the start and end of an event).",[494,1101,1102],{},"As a result marking the start and end of a series of gestures greately simplifies the process.\nTherefore each of the labels above will have a start and a stop label.",[494,1104,1105,1106,1109],{},"Running the tool will allow the user to type each label in, however this is slow, especially if it's the same labels each time.\nInstead, we can supply a ",[603,1107,1108],{},".json"," file containing the labels we want to use and supply this file instead.",[1111,1112,1113],"code-collapse",{},[1114,1115],"file-code",{"file":1116,"filename":1117},"2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002Flabels.txt","labels.json",[494,1119,1120,1121,1123],{},"Create the ",[603,1122,1117],{}," label file with the same contents.",[560,1125,1126],{},[494,1127,1128,1129,1131],{},"These sorts of labels only work when you can start and stop specific behaviours on demand.\n",[599,1130],{},"\nSimlarly, some behaviours might be more specific and require more fine tuned labelling.\nUsually, a label may be required on a per-event basis, making the tool much more valuable under\nthose circumstances.",[833,1133,1135],{"id":1134},"test-run","Test Run",[494,1137,1138,1139,1142],{},"Ensuring your gateway and gateway scripts are still running, start the ",[603,1140,1141],{},"infuse bt_log"," tool again\n(if not currently running).",[494,1144,1145],{},"Now use the following command to try to send some annotations to the device:",[658,1147,1148],{},[494,1149,1150,1151,1153],{},"Place your ",[603,1152,1117],{}," in the present working directory, or update the path in the command.",[583,1155,1156,1161],{"sync":879},[587,1157,1158],{"label":882,"icon":883},[755,1159],{"language":725,"template":1160},"infuse annotate_events --id {infuseId} --preset-labels labels.json --gatt\n",[587,1162,1163],{"label":961,"icon":962},[583,1164,1166,1172],{"sync":1165},"logger",[587,1167,1169],{"label":1168},"Onboard Flash",[755,1170],{"language":725,"template":1171},"infuse annotate_events --id {infuseId} --preset-labels labels.json --onboard\n",[587,1173,1175],{"label":1174},"Removable Flash",[755,1176],{"language":725,"template":1177},"infuse annotate_events --id {infuseId} --preset-labels labels.json --external\n",[494,1179,1180,1181,1184],{},"Once ready, select the annotation you want to send using the arrow keys and hit ",[952,1182],{"value":1183},"enter","\nto send it.",[494,1186,1187,1188,1191,1192,1194,1195,606],{},"An ",[603,1189,1190],{},"ANNOTATION"," TDF should appear in the ",[603,1193,1141],{}," console and the corresponding ",[603,1196,916],{},[658,1198,1199],{},[494,1200,1201,1202,1205,1206,955,1208,1210],{},"Select the ",[603,1203,1204],{},"Exit"," option or enter ",[952,1207],{"value":954},[952,1209],{"value":958}," to close the tool.",[494,1212,1213],{},"You're now all set to run an experiment.",[658,1215,1216],{},[494,1217,1218,1219,1221],{},"It may be useful to delete the existing ",[603,1220,916],{}," files before starting an actual experiment.\nRe-running the logging script will not overwrite existing data, instead appending to it.",[530,1223,1225],{"id":1224},"running-an-experiment","Running an Experiment",[494,1227,1228],{},"It's now time to run the experiment.",[526,1230,1231,1235,1238,1249,1253,1256,1274,1278,1281,1285,1288,1292,1295],{"level":831},[833,1232,1234],{"id":1233},"start-logging","Start Logging",[494,1236,1237],{},"Repeat the process before starting to log data with:",[583,1239,1240,1245],{"sync":879},[587,1241,1242],{"label":882,"icon":883},[755,1243],{"language":725,"template":1244},"infuse bt_log --id {infuseId} --data --csv {savePath}\n",[587,1246,1247],{"label":961,"icon":962},[494,1248,965],{},[833,1250,1252],{"id":1251},"start-the-annotation-tool","Start the annotation Tool",[494,1254,1255],{},"And then running the annotation tool to get ready:",[583,1257,1258,1262],{"sync":879},[587,1259,1260],{"label":882,"icon":883},[755,1261],{"language":725,"template":1160},[587,1263,1264],{"label":961,"icon":962},[583,1265,1266,1270],{"sync":1165},[587,1267,1268],{"label":1168},[755,1269],{"language":725,"template":1171},[587,1271,1272],{"label":1174},[755,1273],{"language":725,"template":1177},[833,1275,1277],{"id":1276},"start-labelling","Start labelling",[494,1279,1280],{},"Select a behaviour to perform e.g. \"Double Tap\" and send the start annotation\nPerform the behaviour repeatedly for a given duration",[833,1282,1284],{"id":1283},"stop-labelling","Stop labelling",[494,1286,1287],{},"When finished, send the corresponding end annotation.",[833,1289,1291],{"id":1290},"repeat","Repeat",[494,1293,1294],{},"Repeat the process for the remaining labels. For the \"Unknown\" class, perform random or other motions\nunlike the other gestures (like dropping, rolling, shaking, etc).",[658,1296,1297],{},[494,1298,1299,1300,1302],{},"The process can be repeated for the same label to collect additional data.",[599,1301],{},"\nEspecially under different conditions such as holding the tag with a different orientation\nor other people performing the actions.",[494,1304,1305],{},"With this the data collection process is complete. This process can be repeated to increase and diversify the\nraw data we use to create the training dataset.",[494,1307,1308],{},"The next step is to take the raw data collected and turn it into a training dataset.",[1310,1311,1312],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":726,"searchDepth":1314,"depth":1315,"links":1316},3,2,[1317,1318,1319,1320,1321,1322,1328],{"id":532,"depth":1315,"text":533},{"id":680,"depth":1315,"text":681},{"id":696,"depth":1315,"text":697},{"id":707,"depth":1315,"text":708},{"id":795,"depth":1315,"text":796},{"id":824,"depth":1315,"text":825,"children":1323},[1324,1325,1326,1327],{"id":835,"depth":1314,"text":836},{"id":855,"depth":1314,"text":856},{"id":968,"depth":1314,"text":969},{"id":1134,"depth":1314,"text":1135},{"id":1224,"depth":1315,"text":1225,"children":1329},[1330,1331,1332,1333,1334],{"id":1233,"depth":1314,"text":1234},{"id":1251,"depth":1314,"text":1252},{"id":1276,"depth":1314,"text":1277},{"id":1283,"depth":1314,"text":1284},{"id":1290,"depth":1314,"text":1291},"Collect raw sensor data to create a dataset","md",null,{},true,{"title":369,"description":1335},"s6iOwjMk62RcYWUKWC7snYou75i2xciSu5kbITMfoy8",[1343,1345],{"title":363,"path":364,"stem":365,"description":1344,"children":-1},"A Guide to create embedded ML algorithms",{"title":373,"path":374,"stem":375,"description":1346,"children":-1},"Preprocess and create a dataset.",1791526861721]