Build device service

Build your device service

Make your own devices available on NOVA to use them in projects, or offer them to be used by others via OpenAPI (opens in a new tab).

Wandelbots NOVA currently supports two connection interfaces: Ethernet and Inputs/Outputs (IOs).

Ethernet allows for connections to protocols like PROFINET, Mod-Bus, etc. The connection can be established via gateways, which map the interface to Ethernet.

🤖

Further interfaces, e.g. USB, are currently in development. If you want to use other connection interfaces to integrate your device, send us feedback (opens in a new tab) on which device integrations should be developed next.

Structure

The following example demonstrates how to integrate a device on NOVA using a Zivid camera and the NOVAx framework.

Service Concept

Currently, your app can expose all endpoints. The only limitation is the capabilities of your device.

🤖

We are currently working on the definition and introduction of interfaces that will enable cross-manufacturer access to diverse device types, e.g. cameras, grippers.

Build a device service with NOVAx

Create your service using the NOVAx framework which provides OpenAPI-compliant endpoints and easy deployment to Wandelbots NOVA.

  from novax import Novax
  import uvicorn
 
  @nova.program()
  async def control_device(command: str):
      # Your device control logic here
      pass
 
  novax = Novax()
  app = novax.create_app(title="My Device Service")
  novax.include_programs_router(app)
  novax.register_program(control_device)
 
  uvicorn.run(app, host="0.0.0.0", port=8000)

If your device uses robot inputs and outputs, consult the IO integration examples (opens in a new tab) on GitHub. For controller support, see controller.py (opens in a new tab).

Build and push to your registry manually or via CI/CD rerun bridge.

Environment variables

🚨

Ensure your app dynamically handles the base path. For example, if the service is deployed in a cell named cell and your app is called robo-app, then BASE_PATH=/cell/robo-app.

  • BASE_PATH: Path to the service in the NOVA environment
  • NOVA_API: Internal endpoint for service-to-service communication
  • CELL_NAME: The current deployment context

UI Recommendations

Each installed service is shown as an app on the NOVA home screen. It is therefore recommended to:

  • Describe your service’s OpenAPI interface
  • Provide a lightweight UI at the root path. This could be a Stoplight-generated interface or a minimal HTML view, for example

Deployment

Direct container registry access

Build and push your application to a container registry like Azure Container Registry. The NOVA Rerun Bridge app (opens in a new tab), for example, is automatically built and pushed to wandelbots.azurecr.io/nova-apps/nova-rerun-bridge.

External catalog system integration

You can update the external catalog through GitHub API calls, (see NOVA Rerun Bridge app (opens in a new tab)). When apps are built, they automatically trigger catalog updates via repository dispatch events to the wandelbotsgmbh/catalog repository.

Manual deployment via REST API

Deploy applications directly using the NOVA API endpoint POST /api/v2/cells/{cell}/apps (opens in a new tab) with curl or similar tools. This will provide the container image details in YAML/JSON format.

Development distribution

For development builds, the SDK provides a workflow to create installable packages directly from GitHub commits. You can install specific commits using pip with git URLs like pip install "wandelbots-nova @ git+https://github.com/wandelbotsgmbh/wandelbots-nova.git@{commit}".

Publish your app in the app store

Make your device available to other users by sharing the deployment description in the NOVA catalog (opens in a new tab). Open a Pull Request and after being reviewed, the app will be added to the catalog.

NOVA users can then download it in the NOVA app store.