List live telemetry and alerts by device
- Sandbox: available
- Staging: available
- Production: unknown
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/liveand selects the same page of devices in the same order. telemetryandalertsare keyed by the device identifier (for exampleSleepiz/3001000), not by the Device resource id.alertshas an entry for every device on the page.telemetryhas 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) andeco2(ppm) as{ value, ts }. They arenulluntil 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,pageandcountdescribe 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'bearerAuthorizationBearer <JWT>page?string"0"count?string"20"sortBy?string"locationName""locationName""patientName""patientNickname""organizationName""effectiveHeartRate""effectiveRespiratoryRate""effectiveSleepStatus""admissionDate""dischargeDate"orderBy?string"ASC""ASC""DESC"search?string1 <= lengthdeviceId?stringRestrict results to a single device (matched against the device identifier).
1 <= lengthorganizationId?|effectiveSleepStatus?string"disconnected""connected""awake""away""asleep"residentState?string"active""discharged-recent""discharged""archived"includeUnassigned?stringTelemetry and alerts for one page of live devices.
application/json- response
total*number0 <= valuepage*number0 <= valuecount*number1 <= valuetelemetry*alerts*curl -X GET 'https://api.sandbox.ovok.com/v1/slim/device/live/telemetry'{ "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' ```