Skip to content

Upload Sensors Tutorial

Example

This tutorial walks you through the complete sensor upload workflow: sensor types, sensors, and sensor calibrations.

Prerequisites

  • Python 3.10+
  • The SDK installed (pip install owi-metadatabase-shm)
  • A valid API token
  • Sensor data files (types, sensors, calibrations) and optional images/PDFs

Overview

The sensor upload workflow follows the SHM data model hierarchy:

flowchart LR
    ST[Sensor Types] --> S[Sensors] --> SC[Sensor Calibrations]

Each step depends on IDs created in the previous step.

Step 1 — Set Up the API Client

from owi.metadatabase.shm import ShmAPI, ShmSensorUploader

api = ShmAPI(
    api_root="https://owimetadatabase.azurewebsites.net/api/v1",
    token="your-api-token",
)

uploader = ShmSensorUploader(shm_api=api)

Step 2 — Upload Sensor Types

Load your sensor type definitions and upload them:

from owi.metadatabase.shm import load_json_data

sensor_types = load_json_data("data/sensors/sensor_types.json")

type_results = uploader.upload_sensor_types(
    sensor_types_data=sensor_types,
    permission_group_ids=[1, 2],
    path_to_images="data/sensors/img/",
)

print(f"Created {len(type_results)} sensor types")

Step 3 — Upload Sensors by Category

For each sensor category (accelerometers, strain gages, etc.), resolve the sensor type and upload all per-turbine sensors:

from owi.metadatabase.shm import load_json_data

sensors = load_json_data("data/sensors/sensors.json")

# Upload accelerometers
acc_results = uploader.upload_sensors(
    sensor_type_name="accelerometers",
    sensor_type_params={"name": "393B04"},
    sensors_data=sensors,
    permission_group_ids=[1, 2],
)

# Upload strain gages
strain_results = uploader.upload_sensors(
    sensor_type_name="strain_gages",
    sensor_type_params={"name": "CEA-Series"},
    sensors_data=sensors,
    permission_group_ids=[1, 2],
)

Step 4 — Upload Sensor Calibrations

Load your signal-sensor and signal-calibration maps, then upload calibrations with PDF datasheets:

from owi.metadatabase.shm import load_json_data

signal_sensor_map = load_json_data("data/sensors/signal_sensor_map.json")
signal_calibration_map = load_json_data("data/sensors/signal_calibration_map.json")

cal_results = uploader.upload_sensor_calibrations(
    signal_sensor_map_data=signal_sensor_map,
    signal_calibration_map_data=signal_calibration_map,
    path_to_datasheets="data/sensors/datasheets/",
)

print(f"Created {len(cal_results)} calibrations")

What You Learned

  • How to set up ShmSensorUploader with protocol-based dependency injection.
  • How to upload sensor types with optional image attachments.
  • How to upload sensors grouped by category across turbines.
  • How to upload sensor calibrations with optional PDF attachments.

Next Steps