MioConnect Integration

RPM device gateway for cellular-connected medical device telemetry

Overview

MioConnect is the RPM device gateway for the Vantrexia platform. It manages telemetry from cellular-connected medical devices, enabling continuous remote patient monitoring without requiring Bluetooth pairing to a smartphone.

How It Works

Patients take readings at home using cellular-enabled medical devices. Data transmits automatically via a cellular hub to the MioConnect cloud, which forwards measurements to Vantrexia in real time via secure webhooks.

MioConnect supports these device categories for RPM programs:

  • Blood Pressure Monitors — Systolic, diastolic, pulse readings
  • Weight Scales — Body weight measurements in lbs/kg
  • Glucose Meters — Blood glucose levels in mg/dL
  • Pulse Oximeters — SpO2 percentage and pulse rate

Supported Devices

Vantrexia supports the following MioConnect-certified devices. All devices connect via a cellular hub and require no patient smartphone interaction.

Device Type Model Connectivity Measurements
Blood Pressure Gen1 A&D UA-651BLE Bluetooth → Cellular Hub Systolic (mmHg), Diastolic (mmHg), Pulse (bpm)
Blood Pressure Gen2 A&D UA-767PBT-Ci Bluetooth → Cellular Hub Systolic (mmHg), Diastolic (mmHg), Pulse (bpm), Irregular Heartbeat Detection
Weight Scale Gen1 A&D UC-352BLE Bluetooth → Cellular Hub Weight (lbs/kg)
Weight Scale Gen2 A&D UC-355PBT-Ci Bluetooth → Cellular Hub Weight (lbs/kg), BMI (when height configured)
Glucose Meter OneTouch Verio Flex Bluetooth → Cellular Hub Blood Glucose (mg/dL), Meal marker (pre/post)
Pulse Oximeter Nonin 3230 Bluetooth → Cellular Hub SpO2 (%), Pulse Rate (bpm)
Device Provisioning

Devices are assigned to patients via the MioConnect portal or through Vantrexia's device management API. Each device is linked to a specific patient ID and cannot produce readings until properly provisioned.

Architecture

The MioConnect integration follows a unidirectional data flow from device to clinical observation:

Data Flow Pipeline
┌──────────────┐    ┌──────────────┐    ┌──────────────────┐
│  Medical     │    │  Cellular    │    │  MioConnect      │
│  Device      │───▶│  Hub         │───▶│  Cloud           │
│  (BLE)       │    │  (LTE/4G)    │    │  (AWS)           │
└──────────────┘    └──────────────┘    └────────┬─────────┘
                                                 │
                                          Webhook POST
                                         (HMAC-SHA256)
                                                 │
                                                 ▼
┌──────────────┐    ┌──────────────┐    ┌──────────────────┐
│  FHIR        │    │  Observation │    │  Vantrexia       │
│  Resource    │◀───│  Model       │◀───│  Backend         │
│  (R4)        │    │  (Django)    │    │  (Webhook EP)    │
└──────────────┘    └──────────────┘    └──────────────────┘

Pipeline Stages

  1. Device Measurement — Patient takes a reading on the medical device (e.g., blood pressure cuff)
  2. BLE Transmission — Device sends data via Bluetooth Low Energy to the nearby cellular hub
  3. Cellular Upload — Hub transmits the reading over LTE/4G to MioConnect's cloud infrastructure
  4. Webhook Delivery — MioConnect sends an authenticated POST request to the Vantrexia webhook endpoint
  5. Observation Creation — Vantrexia validates the payload and creates an Observation model instance
  6. FHIR Transformation — The observation is transformed into a FHIR R4 Observation resource for interoperability
Latency Considerations

End-to-end latency from device reading to Vantrexia observation is typically 30–90 seconds. Factors include BLE pairing time, cellular signal strength, and webhook delivery. Readings are timestamped at the device level to ensure clinical accuracy.

Configuration

Setting up the MioConnect integration requires configuration in both the MioConnect portal and the Vantrexia backend.

1. MioConnect Portal Credentials

Obtain the following from your MioConnect account representative:

.env
# MioConnect Integration
MIOCONNECT_API_KEY=your_api_key_here
MIOCONNECT_API_SECRET=your_api_secret_here
MIOCONNECT_ORGANIZATION_ID=your_org_id
MIOCONNECT_WEBHOOK_SECRET=your_webhook_shared_secret
MIOCONNECT_BASE_URL=https://api.mioconnect.com/v2

2. Webhook URL Setup

Configure the webhook endpoint in the MioConnect portal to point to your Vantrexia backend instance:

Webhook URL
POST https://api.yourdomain.com/api/v1/mio/webhook/

3. SSL Certificate Requirements

MioConnect requires a valid SSL certificate on the webhook endpoint:

  • TLS 1.2 or higher (TLS 1.3 recommended)
  • Certificate must be issued by a trusted CA (no self-signed certificates)
  • If using Cloudflare, enable Full (Strict) SSL mode
  • Certificate must cover the exact domain used in the webhook URL

4. IP Whitelisting

Whitelist the following MioConnect IP ranges in your firewall or security group:

MioConnect IP Ranges
# MioConnect Production IPs
52.22.140.0/24
52.22.141.0/24
34.205.120.0/24

# MioConnect Staging IPs (for testing)
52.22.142.0/24
Django Settings

Ensure MIOCONNECT_ENABLED = True is set in your Django settings. The webhook endpoint is automatically registered when the mio_integration app is included in INSTALLED_APPS.

Webhook Integration

MioConnect delivers device readings to Vantrexia via authenticated webhook POST requests.

Endpoint

HTTP
POST /api/v1/mio/webhook/
Content-Type: application/json
X-Mio-Signature: sha256=<HMAC-SHA256 signature>
X-Mio-Timestamp: 1738000000

Authentication

Every webhook request is authenticated using an HMAC-SHA256 signature sent in the X-Mio-Signature header. Vantrexia validates this signature before processing the payload:

Python — Signature Verification
import hmac
import hashlib

def verify_mio_signature(payload_body: bytes, secret: str, signature: str) -> bool:
    """Verify the HMAC-SHA256 signature from MioConnect webhook."""
    expected = hmac.new(
        key=secret.encode('utf-8'),
        msg=payload_body,
        digestmod=hashlib.sha256
    ).hexdigest()
    received = signature.replace('sha256=', '')
    return hmac.compare_digest(expected, received)

Payload Format

The webhook payload is a JSON object containing the device reading:

JSON — Example Blood Pressure Reading
{
  "event_type": "measurement.created",
  "device_id": "MIO-BP2-00A4F1",
  "patient_id": "pat_abc123def456",
  "measurement_type": "blood_pressure",
  "values": {
    "systolic": 128,
    "diastolic": 82,
    "pulse": 72,
    "irregular_heartbeat": false
  },
  "unit": "mmHg",
  "timestamp": "2026-02-09T08:30:00Z",
  "device_model": "UA-767PBT-Ci",
  "battery_level": 85,
  "signal_strength": -67,
  "hub_id": "HUB-CEL-0042"
}

Supported Event Types

Event Type Description
measurement.created New device reading received
device.connected Device paired with hub successfully
device.disconnected Device lost connection with hub
device.battery_low Device battery below 20%
hub.offline Cellular hub went offline

Retry Policy

MioConnect implements automatic retries for failed webhook deliveries:

  • Maximum retries: 3 attempts
  • Backoff strategy: Exponential backoff — 1 min, 5 min, 15 min
  • Success criteria: HTTP 200 response within 10 seconds
  • Failure action: After 3 failures, the event is queued and an alert is sent to the MioConnect dashboard
Idempotency

Webhook deliveries may be retried. Always process webhooks idempotently using the device_id + timestamp combination as a deduplication key to prevent duplicate observations.

Operating Modes

MioConnect can operate in two modes depending on your practice's preferences and technical capacity.

Managed Mode Recommended

In Managed Mode, Vantrexia handles the full device lifecycle:

  • Device Provisioning — Devices are ordered, configured, and assigned to patients through the Vantrexia dashboard
  • Patient Assignment — Linking a device to a patient is done via the patient management UI or API
  • Firmware Updates — Vantrexia coordinates OTA firmware updates with MioConnect automatically
  • Replacement Workflow — Defective devices are flagged and replacement orders are initiated through the platform
  • Inventory Tracking — Track device stock levels, assignments, and returns from the admin panel
Python — Assign Device to Patient (Managed Mode)
import requests

response = requests.post(
    "https://api.yourdomain.com/api/v1/devices/assign/",
    headers={"Authorization": "Bearer <token>"},
    json={
        "device_id": "MIO-BP2-00A4F1",
        "patient_id": "pat_abc123def456",
        "device_type": "blood_pressure",
        "shipping_address": "123 Main St, Suite 4, Anytown, US 12345"
    }
)
# Returns: {"status": "assigned", "estimated_delivery": "2026-02-12"}

Self-Managed Mode

In Self-Managed Mode, the practice manages devices directly through the MioConnect portal:

  • Device Provisioning — Practice staff configure devices in the MioConnect portal
  • Patient Assignment — Devices are linked to patients using MioConnect's patient_id mapping
  • Firmware Updates — Managed independently via the MioConnect admin console
  • Vantrexia receives data only — The platform acts as a data consumer, processing incoming webhooks without managing device state
Choosing a Mode

Managed Mode is recommended for most practices as it simplifies operations and provides a unified experience. Self-Managed Mode is best for large organizations with existing MioConnect infrastructure and dedicated IT teams.

Monitoring & Alerts

Vantrexia provides comprehensive monitoring for all connected MioConnect devices to ensure continuous care delivery.

Device Connectivity Monitoring

The system tracks the online/offline status of every device and hub in real time:

  • Hub heartbeat — Cellular hubs send a heartbeat every 5 minutes. If no heartbeat is received for 15 minutes, the hub is marked offline.
  • Device last-seen — Each device's last transmission timestamp is tracked. Devices with no reading in 24 hours are flagged.

Battery Status

Battery levels are reported with each measurement. Vantrexia generates alerts at these thresholds:

Battery Level Status Action
> 20% Normal No action required
10–20% Low Dashboard warning, email notification to care team
< 10% Critical Urgent alert, replacement initiated (Managed Mode)

Missed Readings Detection

Vantrexia monitors patient compliance by detecting missed readings based on their prescribed schedule:

  • Patients assigned daily readings receive a missed reading alert if no measurement is received by the end of the day
  • The care team is notified via dashboard alerts and optional push notifications
  • Consecutive missed days are escalated with increasing urgency in triage

Stale Data Alerts

If a device transmits the exact same readings repeatedly (e.g., identical weight 5 days in a row), Vantrexia flags this as potentially stale data — which may indicate a device malfunction or the device is not being used by the patient.

Troubleshooting

  1. Check that the cellular hub is powered on and the LED indicator shows a solid green light
  2. Verify the hub has cellular signal — move it near a window if signal is weak
  3. Confirm the device is within Bluetooth range of the hub (typically 10–30 feet)
  4. Power cycle both the device and the hub
  5. Check the MioConnect portal for hub connectivity status
  6. If the hub remains offline, contact MioConnect support for a replacement
  1. Verify the webhook URL is correct in the MioConnect portal
  2. Check that the SSL certificate is valid and not expired
  3. Confirm the Vantrexia backend is accessible from MioConnect IPs (check firewall rules)
  4. Verify the MIOCONNECT_WEBHOOK_SECRET environment variable matches the shared secret in the MioConnect portal
  5. Check backend logs for signature verification errors:
    docker-compose logs backend | grep "mioconnect"
  6. Test the endpoint manually:
    curl -X POST https://api.yourdomain.com/api/v1/mio/webhook/ \
      -H "Content-Type: application/json" \
      -H "X-Mio-Signature: sha256=test" \
      -d '{"event_type": "test"}'
  1. Verify the device is calibrated — medical devices should be validated annually
  2. Check that the patient is using the device correctly (e.g., proper cuff placement for BP monitors)
  3. Compare the reading in Vantrexia with the raw payload in the webhook logs:
    docker-compose exec backend python manage.py shell -c "
    from apps.mio_integration.models import MioWebhookLog
    logs = MioWebhookLog.objects.filter(device_id='MIO-BP2-00A4F1').order_by('-created_at')[:5]
    for log in logs:
        print(log.payload)
    "
  4. Check for timezone discrepancies between the device timestamp and server time
  5. Verify the unit conversion is correct (some devices may report in non-standard units)
  6. If readings are consistently off, submit a device replacement request

Duplicate observations can occur when MioConnect retries a webhook delivery. The deduplication logic uses device_id + timestamp as a unique key.

  1. Check if the webhook endpoint is responding slowly (>10 seconds triggers a retry)
  2. Verify the deduplication logic is enabled in settings:
    # settings.py
    MIOCONNECT_DEDUP_ENABLED = True
    MIOCONNECT_DEDUP_WINDOW_SECONDS = 300  # 5-minute window
  3. Manually remove duplicate observations via the admin panel or API