ResMed CPAP data collection service for Home Assistant. Collects therapy data via ez Share WiFi SD card with OSCAR-compatible metrics.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A small, local-only CPAP data viewer. Reads your machine's SD card, shows you your nights in a web dashboard, and (optionally) publishes them to Home Assistant.
HMS-CPAP is a hobbyist data viewer. It is not a medical device, is not cleared
by any regulator, and cannot diagnose anything or tell you whether your
therapy is working. Never change your therapy settings based on this
software. Talk to the clinician who manages your therapy. The numbers can be
wrong: the parsers read undocumented, reverse-engineered formats.檢視完整 README ↗A small, local-only CPAP data viewer. Reads your machine's SD card, shows you your nights in a web dashboard, and (optionally) publishes them to Home Assistant.
Not a medical device
HMS-CPAP is a hobbyist data viewer. It is not a medical device, is not cleared by any regulator, and cannot diagnose anything or tell you whether your therapy is working. Never change your therapy settings based on this software. Talk to the clinician who manages your therapy. The numbers can be wrong: the parsers read undocumented, reverse-engineered formats.
Read DISCLAIMER.md before using this. By using it you accept the Terms of Use. Not affiliated with ResMed, Philips, Löwenstein, Sefam, BMC, React Health, SleepHQ, or anyone else named here. See NOTICE.
A C++ service with a built-in Angular web UI. It pulls the files your CPAP writes to its SD card (over WiFi via an ezShare or Toshiba FlashAir card, or from a folder), parses them itself, stores the results in a database, and shows you the data. It is a fully local-first experience.
Supported machines
| Manufacturer | Models | Live sessions |
|---|---|---|
| ResMed | AirSense 10, AirSense 11 | Yes, charts update every 65s during therapy |
| Lowenstein | Prisma Line (20A, 20C, 25S, 25ST), Prisma Smart (Max, Plus, Soft) | No, files are written after each session |
| Sefam | S.Box AUTO (1263R), SleepBox AUTO (1200R) | No, the card is read after the night |
| BMC / React Health | Luna | No, the card is read after the night |
On a Sefam card you get the recorded signals, breath-by-breath respiratory mechanics, and apneas. You do not get an AHI. The machine records apneas but does not mark hypopneas in a form anyone outside Sefam can read, so HMS-CPAP shows an apnea-only index and labels it as one. It will read lower than the AHI a ResMed reports for the same night. That is a different measurement, not a better night.
On a Luna card you get pressure, leak, respiratory rate and I:E ratio per minute, and the apneas the machine marks itself (obstructive and clear airway). On a bi-level Luna, IPAP, EPAP and pressure support are reported too. There is no flow waveform yet: its scale on the card is not known, and a number in the wrong unit is worse than none. A Luna is read from a local folder or the upload page, not over WiFi.
.zip or O2Ring .csv from any browser, no shared network neededPick one. Every path ends at the same four-screen setup wizard in your browser: where to store data, where the data comes from, which optional extras to turn on, and whether to start at boot.
Settings -> Apps -> three dots -> Repositories, add:
https://github.com/hms-homelab/hms-cpap-ha-addon
Install CpapDash, start it, and the wizard opens through Ingress. No port to open, no second password; the MQTT broker's credentials are picked up automatically.
Download HmsCpapInstaller-Setup.exe from
Releases and run it. No
admin rights needed. A tray icon gives you Open Dashboard, Sync Now, and Start
at Login.
Download hms-cpap-macos-arm64.zip from
Releases, unzip, run:
./hms_cpap
Your browser opens on http://localhost:8893/setup.
The image on GHCR is built for arm64 and amd64, so it runs as-is on a
64-bit Pi 3/4/5 or any x86 Linux box. Nothing to compile.
docker run -d --name hms-cpap -p 8893:8893 \
-v cpap_config:/config -v cpap_data:/data \
ghcr.io/hms-homelab/hms-cpap:latest
Open http://localhost:8893/setup. Config lives in the cpap_config volume and
data in cpap_data; neither is touched by image updates.
If you'd rather have PostgreSQL and an MQTT broker alongside it, clone the repo
and run docker compose up -d instead; it brings up all three and waits for
the database before starting CpapDash.
A Pi that already runs Home Assistant can skip Docker entirely and use the add-on above.
git clone https://github.com/hms-homelab/hms-cpap.git
cd hms-cpap
./build_and_deploy.sh --deploy # builds frontend + backend, runs tests, installs the systemd unit
Or without the script: mkdir build && cd build && cmake .. && make -j$(nproc) && ./hms_cpap.
ResMed AirSense 11 with REF 39517 on the label underneath: its SD slot can't power a WiFi SD card reliably, so don't use an ez Share or a Toshiba FlashAir in it. Read it over its own Bluetooth instead (see AirSense 11 over Bluetooth), or use a local folder or the upload page.
APPMODE=5 in its SD_WLAN/CONFIG) and pick FlashAir in the wizard; it is
found as http://flashair.local, or give its address. ResMed cards. Tested
on a FlashAir W-02 in an AirSense 10, read live through a full night.STR.edf and DATALOG/), on a USB reader, NAS share, or any mount. For
a Luna, point it at the card root and pick "BMC / React Health Luna".Everything else (config keys, CLI flags, MQTT sensor list, myAir setup, architecture, development, cross-compiling) is in docs/REFERENCE.md.
The architecture/ folder maps the code:
Fork, branch, add tests, make sure ./tests/run_tests passes, open a PR. See
docs/CONTRIBUTING.md.
If this project is useful to you, consider buying me a coffee or starring the repo.