[{"data":1,"prerenderedAt":1008},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fota-upgrades":488,"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fota-upgrades-surround":1003},[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":184,"body":490,"description":997,"extension":998,"links":999,"meta":1000,"navigation":629,"path":185,"seo":1001,"stem":186,"__hash__":1002},"docs\u002F1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F09.ota-upgrades.md",{"type":491,"value":492,"toc":987},"minimark",[493,530,870,873,882,904,913,922,930,945,958,966,975,983],[494,495,496,497,508,509,520,521,525,526,529],"p",{},"The ",[498,499,503],"code",{"className":500,"language":501,"style":502},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bash","",[504,505,507],"span",{"class":506},"sBMFI","ota_upgrade"," tool monitors incoming\n",[510,511,515],"a",{"href":512,"rel":513},"https:\u002F\u002Fdocs.dev.infuse-iot.com\u002Flatest\u002Fdoxygen\u002Fhtml\u002Fgroup__builtin__tdf__definitions.html#gga8748a1fb950dec71d28a21c7619d0be2a200a29715f5b2492472ca0c6c5d8044a",[514],"nofollow",[498,516,517],{"className":500,"language":501,"style":502},[504,518,519],{"class":506},"TDF_ANNOUNCE","\npackets to find devices running old versions of a given release and automatically upgrades them.\nThe tool will run continuously until stopped with ",[522,523],"kbd",{"value":524},"meta"," + ",[522,527],{"value":528},"C"," or\nall specified devices have been upgraded.",[531,532,534],"pre",{"className":500,"code":533,"language":501,"meta":502,"style":502},"> infuse ota_upgrade --help\nusage: infuse ota_upgrade [-h] (--release RELEASE | --single SINGLE) [--rssi RSSI] [--log LOG]\n                          [--conn-timeout CONN_TIMEOUT] [--id ID | --list LIST]\n\nAutomatically OTA upgrade observed devices\n\noptions:\n  -h, --help            show this help message and exit\n  --release RELEASE, -r RELEASE\n                        Application release to upgrade to\n  --single SINGLE       Single diff\n  --rssi RSSI           Minimum RSSI to attempt upgrade process\n  --log LOG             File to write upgrade results to\n  --conn-timeout CONN_TIMEOUT\n                        Timeout to wait for a connection to the device (ms)\n  --id ID               Single device to upgrade\n  --list LIST           File containing a list of IDs to upgrade\n",[498,535,536,548,600,624,631,649,654,660,687,702,719,733,757,781,790,821,840],{"__ignoreMap":502},[504,537,540,544],{"class":538,"line":539},"line",1,[504,541,543],{"class":542},"sMK4o",">",[504,545,547],{"class":546},"sTEyZ"," infuse ota_upgrade --help\n",[504,549,551,554,558,561,564,567,570,573,576,579,582,585,588,591,594,597],{"class":538,"line":550},2,[504,552,553],{"class":506},"usage:",[504,555,557],{"class":556},"sfazB"," infuse",[504,559,560],{"class":556}," ota_upgrade",[504,562,563],{"class":546}," [-h] (",[504,565,566],{"class":506},"--release",[504,568,569],{"class":556}," RELEASE",[504,571,572],{"class":542}," |",[504,574,575],{"class":506}," --single",[504,577,578],{"class":556}," SINGLE",[504,580,581],{"class":546},") ",[504,583,584],{"class":542},"[",[504,586,587],{"class":546},"--rssi RSSI",[504,589,590],{"class":542},"]",[504,592,593],{"class":542}," [",[504,595,596],{"class":546},"--log LOG",[504,598,599],{"class":542},"]\n",[504,601,603,606,609,611,613,616,619,622],{"class":538,"line":602},3,[504,604,605],{"class":542},"                          [",[504,607,608],{"class":546},"--conn-timeout CONN_TIMEOUT",[504,610,590],{"class":542},[504,612,593],{"class":542},[504,614,615],{"class":546},"--id ID ",[504,617,618],{"class":542},"|",[504,620,621],{"class":546}," --list LIST",[504,623,599],{"class":542},[504,625,627],{"class":538,"line":626},4,[504,628,630],{"emptyLinePlaceholder":629},true,"\n",[504,632,634,637,640,643,646],{"class":538,"line":633},5,[504,635,636],{"class":506},"Automatically",[504,638,639],{"class":556}," OTA",[504,641,642],{"class":556}," upgrade",[504,644,645],{"class":556}," observed",[504,647,648],{"class":556}," devices\n",[504,650,652],{"class":538,"line":651},6,[504,653,630],{"emptyLinePlaceholder":629},[504,655,657],{"class":538,"line":656},7,[504,658,659],{"class":506},"options:\n",[504,661,663,666,669,672,675,678,681,684],{"class":538,"line":662},8,[504,664,665],{"class":506},"  -h,",[504,667,668],{"class":556}," --help",[504,670,671],{"class":556},"            show",[504,673,674],{"class":556}," this",[504,676,677],{"class":556}," help",[504,679,680],{"class":556}," message",[504,682,683],{"class":556}," and",[504,685,686],{"class":556}," exit\n",[504,688,690,693,696,699],{"class":538,"line":689},9,[504,691,692],{"class":506},"  --release",[504,694,695],{"class":556}," RELEASE,",[504,697,698],{"class":556}," -r",[504,700,701],{"class":556}," RELEASE\n",[504,703,705,708,711,714,716],{"class":538,"line":704},10,[504,706,707],{"class":506},"                        Application",[504,709,710],{"class":556}," release",[504,712,713],{"class":556}," to",[504,715,642],{"class":556},[504,717,718],{"class":556}," to\n",[504,720,722,725,727,730],{"class":538,"line":721},11,[504,723,724],{"class":506},"  --single",[504,726,578],{"class":556},[504,728,729],{"class":556},"       Single",[504,731,732],{"class":556}," diff\n",[504,734,736,739,742,745,747,749,752,754],{"class":538,"line":735},12,[504,737,738],{"class":506},"  --rssi",[504,740,741],{"class":556}," RSSI",[504,743,744],{"class":556},"           Minimum",[504,746,741],{"class":556},[504,748,713],{"class":556},[504,750,751],{"class":556}," attempt",[504,753,642],{"class":556},[504,755,756],{"class":556}," process\n",[504,758,760,763,766,769,771,774,776,779],{"class":538,"line":759},13,[504,761,762],{"class":506},"  --log",[504,764,765],{"class":556}," LOG",[504,767,768],{"class":556},"             File",[504,770,713],{"class":556},[504,772,773],{"class":556}," write",[504,775,642],{"class":556},[504,777,778],{"class":556}," results",[504,780,718],{"class":556},[504,782,784,787],{"class":538,"line":783},14,[504,785,786],{"class":506},"  --conn-timeout",[504,788,789],{"class":556}," CONN_TIMEOUT\n",[504,791,793,796,798,801,804,807,810,812,815,818],{"class":538,"line":792},15,[504,794,795],{"class":506},"                        Timeout",[504,797,713],{"class":556},[504,799,800],{"class":556}," wait",[504,802,803],{"class":556}," for",[504,805,806],{"class":556}," a",[504,808,809],{"class":556}," connection",[504,811,713],{"class":556},[504,813,814],{"class":556}," the",[504,816,817],{"class":556}," device",[504,819,820],{"class":546}," (ms)\n",[504,822,824,827,830,833,835,837],{"class":538,"line":823},16,[504,825,826],{"class":506},"  --id",[504,828,829],{"class":556}," ID",[504,831,832],{"class":556},"               Single",[504,834,817],{"class":556},[504,836,713],{"class":556},[504,838,839],{"class":556}," upgrade\n",[504,841,843,846,849,852,855,857,860,863,866,868],{"class":538,"line":842},17,[504,844,845],{"class":506},"  --list",[504,847,848],{"class":556}," LIST",[504,850,851],{"class":556},"           File",[504,853,854],{"class":556}," containing",[504,856,806],{"class":556},[504,858,859],{"class":556}," list",[504,861,862],{"class":556}," of",[504,864,865],{"class":556}," IDs",[504,867,713],{"class":556},[504,869,839],{"class":556},[494,871,872],{},"Different options can be used to configure the OTA upgrade and filter which devices are targeted for OTA upgrades.",[874,875,877,881],"h2",{"id":876},"release-specify-release-binary",[498,878,879],{"className":500,"language":501,"style":502},[504,880,566],{"class":506}," Specify release binary",[494,883,496,884,888,889,894,895,903],{},[498,885,886],{"className":500,"language":501,"style":502},[504,887,566],{"class":506}," argument must point to the folder of an application release generated by the\n",[510,890,893],{"href":891,"rel":892},"https:\u002F\u002Fdocs.dev.infuse-iot.com\u002Flatest\u002Ftooling\u002Frelease_framework.html#tooling-release-framework",[514],"Application Release","\nFramework. For a given observed device to be upgraded, the release folder must contain a valid diff from the current\nversion of the device, as generated by ",[498,896,897,900],{"className":500,"language":501,"style":502},[504,898,899],{"class":506},"west",[504,901,902],{"class":556}," release-diff",".",[494,905,906,907,912],{},"Alternatively, a single diff file can be explicitly provided through the ",[498,908,909],{"className":500,"language":501,"style":502},[504,910,911],{"class":506},"--single"," argument. If provided, the diff\nfile is saved onto the flash chip of the connected gateway and the gateway itself handles the diff transfer process\n(the python script still controls which devices are upgraded). Sending the diff from the gateways flash can\ndramatically speed up OTA times due to eliminating the round-trip delays incurred by sending commands and responses\nover the serial link and through the python tooling.",[874,914,916,921],{"id":915},"rssi-proximity-filtering",[498,917,918],{"className":500,"language":501,"style":502},[504,919,920],{"class":506},"--rssi"," Proximity Filtering",[494,923,924,925,929],{},"To prevent the tool from wasting time attempting to connect to devices with very low signal strengths, a RSSI limit\ncan be applied to connection attempts with the ",[498,926,927],{"className":500,"language":501,"style":502},[504,928,920],{"class":506}," argument. If provided, only devices with an RSSI at least that\nstrong will trigger a connection attempt.",[874,931,933,938,939,944],{"id":932},"id-list-device-filtering",[498,934,935],{"className":500,"language":501,"style":502},[504,936,937],{"class":506},"--id"," \u002F ",[498,940,941],{"className":500,"language":501,"style":502},[504,942,943],{"class":506},"--list"," Device Filtering",[494,946,947,948,952,953,957],{},"If only a subset of devices should be updated, either a single device can be specified with ",[498,949,950],{"className":500,"language":501,"style":502},[504,951,937],{"class":506},", or a file containing\none Infuse ID per line can be provided with ",[498,954,955],{"className":500,"language":501,"style":502},[504,956,943],{"class":506},". Example file contents are provided below. For both of these\narguments, the script will terminate once all specified devices have been updated.",[531,959,964],{"className":960,"code":962,"language":963},[961],"language-text","0xcc00000000100001\n0xcc00000000100002\n0xcc00000000100006\n0xcc00000000100007\n","text",[498,965,962],{"__ignoreMap":502},[874,967,969,974],{"id":968},"log-device-tracking",[498,970,971],{"className":500,"language":501,"style":502},[504,972,973],{"class":506},"--log"," Device Tracking",[494,976,977,978,982],{},"A CSV log of upgrade attempts and results can be created with the ",[498,979,980],{"className":500,"language":501,"style":502},[504,981,973],{"class":506}," argument.",[984,985,986],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":502,"searchDepth":602,"depth":550,"links":988},[989,991,993,995],{"id":876,"depth":550,"text":990},"--release Specify release binary",{"id":915,"depth":550,"text":992},"--rssi Proximity Filtering",{"id":932,"depth":550,"text":994},"--id \u002F --list Device Filtering",{"id":968,"depth":550,"text":996},"--log Device Tracking","Update individual or batches of nearby devices to newer software releases.","md",null,{},{"title":184,"description":997},"YHLCyntBoOTaCelPl1XnHKRzu-fq8sOvdGCtLwLHZmI",[1004,1006],{"title":180,"path":181,"stem":182,"description":1005,"children":-1},"Send and Receive commands to nearby devices.",{"title":188,"path":189,"stem":190,"description":1007,"children":-1},"Securely view device Zephyr logs over Bluetooth.",1791526870620]