SlimSlim/Device

List live telemetry and alerts by device

  • Sandbox: available
  • Staging: available
  • Production: unknown
GET
/v1/slim/device/live/telemetry

Returns the telemetry and alerts for one page of live devices, keyed by device. Use it to poll the values on a page you already loaded with GET /v1/slim/device/live.

Auth: bearer token. The caller must be a practitioner, an admin or a System Owner, and needs search and read on Patient, Device, Location, Observation and Organization. Scope: the caller's project (from the token).

Behaviour

  • Takes the same query parameters as GET /v1/slim/device/live and selects the same page of devices in the same order.
  • telemetry and alerts are keyed by the device identifier (for example Sleepiz/3001000), not by the Device resource id.
  • alerts has an entry for every device on the page. telemetry has an entry only for devices with telemetry.
  • Each telemetry entry carries the room readings roomTemperature (°C), humidity (%), soundLevel (dB), infrared, illuminance (lux), airQualityIndex, tvoc (ppb) and eco2 (ppm) as { value, ts }. They are null until the device reports one, and again when it has sent none for 30 minutes. They do not depend on whether the resident is in bed.
  • total, page and count describe the page, as on /live.
  • Telemetry is read fresh on every request.
  • The route returns 503 when the server is at capacity for live reads or the device list cannot be built. Retry shortly.

Example

curl -X GET 'https://api.sandbox.ovok.com/v1/slim/device/live/telemetry?page=0&count=20' \  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NjcyNjg4MDAsImV4cCI6MTc2NzI3MjQwMH0.Ql3B_ztDvctlyZ2z0vp4sl3ExXRQGkzmxdmTAqxNzZk'

Authorization

bearer
headerAuthorizationBearer <JWT>

Query Parameters

page?string
Default"0"
count?string
Default"20"
sortBy?string
Default"locationName"
Value in"locationName""patientName""patientNickname""organizationName""effectiveHeartRate""effectiveRespiratoryRate""effectiveSleepStatus""admissionDate""dischargeDate"
orderBy?string
Default"ASC"
Value in"ASC""DESC"
search?string
Length1 <= length
deviceId?string

Restrict results to a single device (matched against the device identifier).

Length1 <= length
organizationId?|
effectiveSleepStatus?string
Value in"disconnected""connected""awake""away""asleep"
residentState?string
Value in"active""discharged-recent""discharged""archived"
includeUnassigned?string

Response Body

Telemetry and alerts for one page of live devices.

application/json
  1. response
total*number
Range0 <= value
page*number
Range0 <= value
count*number
Range1 <= value
telemetry*
alerts*
Example Request
curl -X GET 'https://api.sandbox.ovok.com/v1/slim/device/live/telemetry'
Example Response
{  "total": 0,  "page": 0,  "count": 1,  "telemetry": {    "property1": {      "active": {        "value": "string",        "ts": 0      },      "effectiveHeartRate": {        "value": "string",        "ts": 0      },      "effectiveRespiratoryRate": {        "value": "string",        "ts": 0      },      "effectiveSleepStatus": {        "value": "string",        "ts": 0      },      "lastMeasurementTime": {        "value": "string",        "ts": 0      },      "lastActivityTime": {        "value": "string",        "ts": 0      },      "name": {        "value": "string",        "ts": 0      },      "effectiveOxygenSaturation": {        "value": "string",        "ts": 0      },      "effectivePulseRate": {        "value": "string",        "ts": 0      },      "effectiveSystolicBloodPressure": {        "value": "string",        "ts": 0      },      "effectiveDiastolicBloodPressure": {        "value": "string",        "ts": 0      },      "effectiveHeartRateVariability": {        "value": "string",        "ts": 0      },      "effectivePerfusionIndex": {        "value": "string",        "ts": 0      },      "effectiveBodyTemperature": {        "value": "string",        "ts": 0      },      "roomTemperature": {        "value": "string",        "ts": 0      },      "humidity": {        "value": "string",        "ts": 0      },      "soundLevel": {        "value": "string",        "ts": 0      },      "infrared": {        "value": "string",        "ts": 0      },      "illuminance": {        "value": "string",        "ts": 0      },      "airQualityIndex": {        "value": "string",        "ts": 0      },      "tvoc": {        "value": "string",        "ts": 0      },      "eco2": {        "value": "string",        "ts": 0      }    },    "property2": {      "active": {        "value": "string",        "ts": 0      },      "effectiveHeartRate": {        "value": "string",        "ts": 0      },      "effectiveRespiratoryRate": {        "value": "string",        "ts": 0      },      "effectiveSleepStatus": {        "value": "string",        "ts": 0      },      "lastMeasurementTime": {        "value": "string",        "ts": 0      },      "lastActivityTime": {        "value": "string",        "ts": 0      },      "name": {        "value": "string",        "ts": 0      },      "effectiveOxygenSaturation": {        "value": "string",        "ts": 0      },      "effectivePulseRate": {        "value": "string",        "ts": 0      },      "effectiveSystolicBloodPressure": {        "value": "string",        "ts": 0      },      "effectiveDiastolicBloodPressure": {        "value": "string",        "ts": 0      },      "effectiveHeartRateVariability": {        "value": "string",        "ts": 0      },      "effectivePerfusionIndex": {        "value": "string",        "ts": 0      },      "effectiveBodyTemperature": {        "value": "string",        "ts": 0      },      "roomTemperature": {        "value": "string",        "ts": 0      },      "humidity": {        "value": "string",        "ts": 0      },      "soundLevel": {        "value": "string",        "ts": 0      },      "infrared": {        "value": "string",        "ts": 0      },      "illuminance": {        "value": "string",        "ts": 0      },      "airQualityIndex": {        "value": "string",        "ts": 0      },      "tvoc": {        "value": "string",        "ts": 0      },      "eco2": {        "value": "string",        "ts": 0      }    }  },  "alerts": {    "property1": {      "heartRate": {        "alert": true,        "value": {          "property1": null,          "property2": null        },        "message": {          "property1": null,          "property2": null        },        "communicationRequestId": "string",        "observationId": "string",        "color": "string",        "state": "alert",        "updatedAt": "string"      },      "respiratoryRate": {        "alert": true,        "value": {          "property1": null,          "property2": null        },        "message": {          "property1": null,          "property2": null        },        "communicationRequestId": "string",        "observationId": "string",        "color": "string",        "state": "alert",        "updatedAt": "string"      },      "outOfBed": {        "outOfBed": true,        "communicationRequestId": "string",        "sinceTime": "string"      }    },    "property2": {      "heartRate": {        "alert": true,        "value": {          "property1": null,          "property2": null        },        "message": {          "property1": null,          "property2": null        },        "communicationRequestId": "string",        "observationId": "string",        "color": "string",        "state": "alert",        "updatedAt": "string"      },      "respiratoryRate": {        "alert": true,        "value": {          "property1": null,          "property2": null        },        "message": {          "property1": null,          "property2": null        },        "communicationRequestId": "string",        "observationId": "string",        "color": "string",        "state": "alert",        "updatedAt": "string"      },      "outOfBed": {        "outOfBed": true,        "communicationRequestId": "string",        "sinceTime": "string"      }    }  }}

List live device rows GET

Lists live device rows for the dashboard's monitoring views: each device with its resident, location, zone, current telemetry and alerts. **Auth:** bearer token. The caller must be a practitioner, an admin or a System Owner, and needs `search` and `read` on `Patient`, `Device`, `Location`, `Observation` and `Organization`. **Scope:** the caller's project (from the token). ## Behaviour - By default only devices with a resident assigned are returned. Set `includeUnassigned=true` to include devices without a resident. - `organizationId` takes a zone id, `assigned` or `unassigned`. A zone id also matches devices in its child zones. - `deviceId` restricts the result to one device, matched against the device identifier. - `effectiveSleepStatus` filters on the device's current sleep status. - `search` matches resident nickname and name, location name, zone name, and device name, identifier and serial. The resident, location and zone names match fuzzily; the device fields match only as a case-insensitive substring, so a full device name finds that device alone. - `orderBy` is `ASC` or `DESC` in any case, default `ASC`. - `residentState` is accepted but ignored. - A row's `patient` carries the resident's `id`, `name`, `meta` and `extension` only, not the whole FHIR Patient. - Telemetry is read fresh on every request. The device structure is cached and refreshed when you write through the Slim routes. - `page` is zero-based. `count` defaults to 20, maximum 100. - For polling only the telemetry and alerts, use `GET /v1/slim/device/live/telemetry` with the same query. - The route returns 503 when the server is at capacity for live reads or the device list cannot be built. Retry shortly. ## Example ```bash curl -X GET 'https://api.sandbox.ovok.com/v1/slim/device/live?page=0&count=20&sortBy=locationName&orderBy=ASC' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NjcyNjg4MDAsImV4cCI6MTc2NzI3MjQwMH0.Ql3B_ztDvctlyZ2z0vp4sl3ExXRQGkzmxdmTAqxNzZk' ```

List live device rows (lean) GET

Lists live device rows for the dashboard's monitoring views, with only the fields the dashboard renders: each device with its resident, room, zone, current readings and alert colours. **Auth:** bearer token. The caller must be a practitioner, an admin or a System Owner, and needs `search` and `read` on `Patient`, `Device`, `Location`, `Observation` and `Organization`. **Scope:** the caller's project (from the token) and its sub-projects. ## Behaviour - The same query, filters, search, sort and paging as `GET /v1/slim/device/live`. The difference is where the rows come from: only the Devices are read, with the resident, room and zone context every Slim write stores on them, instead of a sweep of every Patient, Location and Organization of the project. - Every field is present; an absent value is `null`. - The resident, room and zone values are the copies stored on the Device, so what a row shows follows the Device's project and access, not a fresh read of the Patient. Each backend fills in devices no Slim write has touched once per build, after it boots; until then such a device answers `residentState: null` and no zone. - `id` is the Medplum Device id. `GET /v2/slim/device/live/telemetry` keys its readings by it. - The device structure is cached and refreshed when you write through the Slim routes. Readings and alerts are read fresh on every request. - `page` is zero-based. `count` defaults to 20, maximum 100. - The route returns 503 when the server is at capacity for live reads or the device list cannot be built. Retry shortly. ## Example ```bash curl -X GET 'https://api.sandbox.ovok.com/v2/slim/device/live?page=0&count=20&sortBy=locationName&orderBy=ASC' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NjcyNjg4MDAsImV4cCI6MTc2NzI3MjQwMH0.Ql3B_ztDvctlyZ2z0vp4sl3ExXRQGkzmxdmTAqxNzZk' ```