Device Integration — Wearables, Bluetooth Devices & Health Stores
This section explains how to integrate health data sources with vitalera — from consumer wearables like Garmin and Fitbit (cloud API) to clinical Bluetooth devices like blood pressure monitors and glucometers (SDK).
Consumer Wearables (API-Based)
Connect popular consumer wearables via server-to-server API integrations. No mobile SDK required for these — users link their accounts once via OAuth, and data flows automatically.
| Wearable | Connection | Data Types | Learn More |
|---|---|---|---|
| Garmin (all models) | Garmin Health API (OAuth) | Workouts, heart rate, sleep, SpO2, stress, steps, HRV | Garmin Integration |
| Fitbit (all models) | Fitbit Web API (OAuth) | Activity, heart rate, sleep, SpO2, weight | Contact sales |
| Apple Watch | HealthKit (on-device) | Heart rate, SpO2 | SDK Reference |
| Polar | SDK (Bluetooth) | Heart rate | SDK Reference |
Medical Devices (SDK — Bluetooth)
| Provider | Module (Android) | Module (iOS) | Devices |
|---|---|---|---|
| Omron | provider-omron | VitaleraSdkProviderOmron | Evolv BPM (HEM-7600T), MC-280B Thermometer |
| Polar | provider-polar | VitaleraSdkProviderPolar | H10, Verity Sense (heart rate) |
| Lifevit | provider-lifevit | VitaleraSdkProviderLifevit | BPM 160, BPM 260, Pulse Oximeter (OL750), Scale (BL2000), Thermometer (IT45B) |
| Beurer | provider-beurer | VitaleraSdkProviderBeurer | BM85 BPM, PO60 Pulse Oximeter |
| Smart Peak Flow | provider-smart-peak-flow | VitaleraSdkProviderSmartPeakFlow | Smart Peak Flow Meter |
| HealthKit | N/A | VitaleraSdkProviderHealthKit | Apple Watch (heart rate, SpO2) |
| Health Connect | provider-health-connect | N/A | Google Health Connect (Android) |
| Standard BLE | sdk-ble | VitaleraSdkBle | Any device using standard Bluetooth SIG health profiles |
See the Supported Devices page for the complete device list.
General Workflow
For all BLE devices, the integration follows three steps:
1. Discover
Scan for nearby BLE devices using DiscoveryFilter to filter by provider, capability, or device name:
// Android (Kotlin)
val filter = DiscoveryFilter(
capabilities = setOf(DeviceCapability.BLOOD_PRESSURE)
)
sdk.devices.discover(filter, timeoutMs = 15_000L).collect { descriptor ->
println("Found: ${descriptor.name} (${descriptor.provider})")
}
// iOS (Swift)
let filter = DiscoveryFilter(
providers: nil,
capabilities: [DeviceCapability.bloodPressure],
namePrefix: nil
)
for try await descriptor in sdk.devices.discover(filter: filter, timeoutMs: 15_000) {
print("Found: \(descriptor.name) (\(descriptor.provider))")
}
2. Connect
Create a device from the discovered descriptor and connect:
// Android
val device = sdk.devices.createDevice(descriptor)
device.connect(timeoutMs = 10_000L)
// iOS
let device = sdk.devices.createDevice(descriptor: descriptor)
try await device.connect(timeoutMs: 10_000)
3. Collect
Read typed observations from the connected device:
// Android
device.collect().collect { observation ->
when (observation) {
is BloodPressureObservation ->
println("BP: ${observation.systolic}/${observation.diastolic}")
is HeartRateObservation ->
println("HR: ${observation.heartRate} bpm")
}
}
device.disconnect()
// iOS
for try await observation in device.collect() {
if let bp = observation as? BloodPressureObservation {
print("BP: \(bp.systolic)/\(bp.diastolic) mmHg")
} else if let hr = observation as? HeartRateObservation {
print("HR: \(hr.heartRate) bpm")
}
}
try await device.disconnect()
Device-Specific Notes
Blood Pressure Monitors
- Beurer BM85: Ensure the device is charged and turned off before scanning. Turn on the device after scanning starts and wait for Bluetooth discovery.
- Lifevit BPM 160/260: Turn on the device, then start scanning. Once connected, call read and wait for the observation.
- Omron Evolv (HEM-7600T): Turn on the device and start scanning. The SDK handles pairing automatically.
Pulse Oximeters
- Lifevit OL750 / Beurer PO60: Place your finger in the oximeter and turn it on, then start scanning. Data streams continuously until you disconnect.
Thermometers
- Lifevit IT45B / Omron MC-280B: Turn on the thermometer, start scanning, and take a measurement. The observation is returned after the reading completes.
Scales
- Lifevit BL2000: Step on the scale when prompted. The weight observation is returned once the reading stabilizes.
Glucometers
- Contour Next: The device must be pre-paired via system Bluetooth settings before scanning from the SDK.
Heart Rate Sensors
- Polar H10: Wear the chest strap, start scanning, and the SDK streams heart rate data continuously.
Further Reading
- SDK Overview -- Architecture, modules, and quick start.
- Android SDK Usage -- Full Android code examples.
- iOS SDK Usage -- Full iOS code examples.
- Supported Devices -- Complete device compatibility list.