accelerometer, gyroscope, gps. Additional sensor types will be added over time — use the same send_signals API as new types land.
Pipeline
- Upload — send a Parquet batch with
OliraClient.send_signals(the SDK chooses sync vs bulk upload for you). - Absorb — Olira validates and normalizes the series (UTC timestamps, canonical units).
- Features — Olira computes features from the absorbed series and emits derived logs. Feature jobs always read the absorbed series, not the raw upload bytes.
Deduplication
- Timestamps are stored at millisecond resolution.
- The same
(patient, device, timestamp)is kept once — the first write wins on re-upload. - An identical file (same content hash) may be accepted as a no-op (
deduplicated: trueon the job).
records_deduplicated counts overlap skips during absorb; that is separate from a content-hash no-op at upload.
What you need
- API key with
sdk:event-log. - Patient already in your org.
- Parquet rows with a
tscolumn plus fields for the sensor type. Today:- accelerometer —
x,y,z(m/s²;g/milli-gaccepted via metadata) - gyroscope —
x,y,z(rad/s) - gps —
lat,lon(optional altitude, accuracy, speed, bearing)
- accelerometer —
- Optional:
pip install olira[signals]so the SDK can serializerecords=to Parquet (or passparquet=bytes yourself).
SDK
Authorization header.
Method reference: send_signals, get_signal_job.
Job statuses
After absorb
Wait for absorption (handle.wait()), then use derived logs and views like any other event data. Feature processing runs on a schedule after new signal data lands — you do not need to call a separate feature API.
