Metadata-Version: 2.4
Name: openmv-ota
Version: 1.0.1
Summary: Secure over-the-air updates for OpenMV cameras: signed, encrypted releases, staged rollouts, and automatic rollback.
Author-email: OpenMV <openmv@openmv.io>
License-Expression: MIT
Project-URL: Homepage, https://github.com/openmv/openmv-ota
Project-URL: Source, https://github.com/openmv/openmv-ota
Project-URL: Issues, https://github.com/openmv/openmv-ota/issues
Keywords: openmv,ota,romfs,firmware,update,ecdsa,embedded
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Embedded Systems
Classifier: Topic :: Security :: Cryptography
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: cryptography>=42
Requires-Dist: pyserial>=3.5
Requires-Dist: mpremote>=1.20
Requires-Dist: httpx>=0.27
Provides-Extra: dev
Requires-Dist: pytest>=7; extra == "dev"
Requires-Dist: pytest-cov>=4; extra == "dev"
Requires-Dist: pytest-xdist>=3; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: hypothesis>=6; extra == "dev"
Provides-Extra: server
Requires-Dist: fastapi>=0.110; extra == "server"
Requires-Dist: uvicorn[standard]>=0.29; extra == "server"
Requires-Dist: pydantic-settings>=2; extra == "server"
Requires-Dist: python-multipart>=0.0.9; extra == "server"
Provides-Extra: server-s3
Requires-Dist: boto3>=1.34; extra == "server-s3"
Provides-Extra: server-postgres
Requires-Dist: psycopg[binary,pool]>=3.1; extra == "server-postgres"
Provides-Extra: hsm
Requires-Dist: python-pkcs11>=0.7; extra == "hsm"
Provides-Extra: aws-kms
Requires-Dist: boto3[crt]>=1.34; extra == "aws-kms"
Provides-Extra: gcp-kms
Requires-Dist: google-cloud-kms>=2; extra == "gcp-kms"
Provides-Extra: azure-kms
Requires-Dist: azure-keyvault-keys>=4; extra == "azure-kms"
Requires-Dist: azure-identity>=1; extra == "azure-kms"
Dynamic: license-file

<img width="360" src="https://raw.githubusercontent.com/openmv/openmv-media/master/logos/openmv-logo/logo.png" alt="OpenMV">

# openmv-ota

Secure over-the-air updates for [OpenMV](https://openmv.io) cameras. Build your
application into a signed, encrypted image, publish it, and roll it out to your
cameras in stages. Each camera downloads, verifies, and installs the update, and
goes back to the last release that worked if the new one won't start.

```bash
pip install openmv-ota
```

Requires Python 3.11 or newer. One install gives you every tool, as a single
`openmv-ota` command.

## What you get

- **Signed, encrypted releases.** Every image is signed with your keys and
  encrypted for your cameras. A camera refuses anything unsigned, tampered with,
  or older than what it runs.
- **Safe installs.** Updates go to a spare slot and are confirmed only after the
  new version starts; a failed update falls back on its own.
- **Small updates.** After the first release, cameras download only what changed.
- **Staged rollouts.** Send a release to a percentage of your fleet or a cohort
  of cameras, then raise, pause, or roll it back.
- **Your keys, where you want them.** On disk (encrypted), in a PKCS#11 HSM, or in
  AWS KMS, Google Cloud KMS, or Azure Key Vault.
- **Hosted or self-hosted.** Use [OpenMV Cloud](https://cloud.openmv.io), which
  adds live video, a console, and data from every camera, or run the update
  server yourself with `pip install "openmv-ota[server]"`.
- **Compliance evidence.** An SBOM for every release, and templates for the EU
  Cyber Resilience Act and RED.

## Supported cameras

OpenMV AE3, N6, RT1062, H7 Plus and H7; Arduino Nicla Vision, Giga R1 and
Portenta H7.

## Quick start

With an [OpenMV Cloud](https://cloud.openmv.io) account, a camera on USB, and a
checkout of the [OpenMV firmware](https://github.com/openmv/openmv):

```bash
openmv-ota project new my-camera -f openmv -b OPENMV_AE3 --ota --install-sdk
openmv-ota build firmware my-camera -b OPENMV_AE3
openmv-ota build factory-romfs my-camera -b OPENMV_AE3
openmv-ota flash factory my-camera -b OPENMV_AE3
openmv-ota client login --server https://ota.cloud.openmv.io
openmv-ota client release publish my-camera -b OPENMV_AE3 -o my-camera/build/factory
```

**Getting started** on OpenMV Cloud walks through every step for your camera.

## Documentation

- [Tutorial](https://github.com/openmv/openmv-ota/blob/main/docs/tutorial/00-introduction.md):
  every command and the update server's API, in the order you use them.
- [EU CRA and RED alignment](https://github.com/openmv/openmv-ota/blob/main/docs/compliance/cra-red-alignment.md)
  and the [residual threats](https://github.com/openmv/openmv-ota/blob/main/docs/compliance/residual-threats.md).
- [Changelog](https://github.com/openmv/openmv-ota/blob/main/CHANGELOG.md).

## Security

Found a vulnerability? Please report it privately; see the
[security policy](https://github.com/openmv/openmv-ota/blob/main/SECURITY.md).

## License

MIT. Source and issues: [github.com/openmv/openmv-ota](https://github.com/openmv/openmv-ota).
