CPAP PrismaAPP Log
v1.1.0Fetches CPAP therapy data from the PrismaAPP API (Löwenstein Medical) and writes a daily Obsidian log note. Use when the user says "CPAP log", "sleep therapy...
Security Scan
Capability signals
These labels describe what authority the skill may exercise. They are separate from suspicious or malicious moderation verdicts.
OpenClaw
Benign
high confidencePurpose & Capability
Name/description, README, SKILL.md, locales, and the Python script all align: the skill logs into my.prismacloud.com, fetches CPAP metrics, and writes a Markdown note to an Obsidian vault. There are no unrelated binaries, cloud providers, or credentials requested.
Instruction Scope
Runtime instructions simply run the included Python script; the script reads a local config.json for email/password, talks to the PrismaAPP API endpoints under the configured api_base, and writes Markdown files to the configured vault path. It does not reference unrelated system paths or external endpoints beyond the configured PrismaAPP API.
Install Mechanism
No install spec and the script uses only Python standard libraries (urllib, zoneinfo, pathlib). Nothing is downloaded from arbitrary URLs and no archives are extracted; risk from installation is minimal.
Credentials
The skill does not request environment variables or platform credentials; it expects a local config.json containing your PrismaAPP email and password. That is proportionate to the function, but storing a plaintext password in a file is a privacy risk — consider file permissions, an app-specific password, or a credential store.
Persistence & Privilege
The skill is not always-enabled and does not request elevated system privileges. It writes notes to your Obsidian vault (expected behavior) and creates the output directory if needed. It does not attempt to modify other skills or system-wide agent settings.
Assessment
This skill appears to do what it says: it logs into my.prismacloud.com with credentials you place in a local config.json, fetches CPAP data, and writes daily notes into your Obsidian vault. Before installing, review and do the following: 1) Inspect config.json and the script yourself and keep config.json out of source control; consider using strict filesystem permissions or a credential manager instead of plaintext passwords. 2) Verify api_base is set to https://my.prismacloud.com (the script warns that other hosts return HTML). 3) Note the script will create files under the vault_path you configure — confirm the path is correct. 4) The navigation link base in the note template is hardcoded to "30 Bereiche/Gesundheit/CPAP/Logs" (minor bug) and may not match your configured log_dir; you may want to update the script to use the configured log_dir for links. 5) Because the skill stores and uses your PrismaAPP credentials, revoke or rotate them if you stop using the skill. If you want added security, adapt the script to read credentials from an OS keyring or prompt at runtime instead of config.json.Like a lobster shell, security has layers — review code before you run it.
cpaphealthlatestloewensteinobsidianprismaappsleep
CPAP PrismaAPP Log Skill
Automatically fetches CPAP therapy data from the Löwenstein PrismaAPP backend and writes a structured daily Obsidian note.
When Triggered
- User says: "CPAP log", "CPAP data", "write sleep therapy", "prisma log", "CPAP today/yesterday/[date]"
- Daily cron job fires (configurable)
- User requests a historical backfill
Prerequisites
- Account at
my.prismacloud.comwith a linked Löwenstein CPAP device - Device synced via the PrismaAPP mobile app (data must be uploaded to the server)
- Credentials stored in
skills/cpap-prisma-app/config.json
Execution
Step 1: Run the Python script
Yesterday (default):
python3 ~/.openclaw/workspace/skills/cpap-prisma-app/scripts/fetch-cpap.py
Specific date:
python3 ~/.openclaw/workspace/skills/cpap-prisma-app/scripts/fetch-cpap.py 2026-04-06
Backfill all data since first sync:
python3 ~/.openclaw/workspace/skills/cpap-prisma-app/scripts/fetch-cpap.py --all
Backfill from a specific date:
python3 ~/.openclaw/workspace/skills/cpap-prisma-app/scripts/fetch-cpap.py --from=2026-03-01
Step 2: Confirm output
The script prints a summary and writes the note to:
<vault_path>/<log_dir>/YYYY-MM-DD.md
Output Format (Note)
The generated note contains:
- Frontmatter: date, weekday, tags (including quality tag), source, created timestamp
- Summary table: sleep duration, deep sleep, AHI, leakage, snoring %, mask fit %, therapy mode/pressure
- Overall quality rating (🟢/🟡/🟠/🔴) derived from AHI, leakage, and deep sleep scores
- Detailed sections: Sleep, CPAP Therapy, Snoring & Mask
- Navigation links to the previous and next logged day
All text is fully localised — see the locales/ folder.
Quality Mapping
| API value | Label | Meaning |
|---|---|---|
| 0 | 🟢 Good | Optimal |
| 1 | 🟡 Okay | Acceptable |
| 2 | 🔴 Poor | Needs attention |
| 3 | 🟠 Borderline | Monitor closely |
| 4 | — | No data |
AHI Reference
| AHI | Classification |
|---|---|
| < 5 | Normal |
| 5–15 | Mild |
| 15–30 | Moderate |
| > 30 | Severe |
Troubleshooting
No data for date:
- Check whether the device was used that night
- Open PrismaAPP on the phone to trigger a Bluetooth sync
- Data only appears after the device has synced with the app
Login error:
- Verify credentials in
config.json - Check that
my.prismacloud.comis reachable - A password change in PrismaAPP requires a
config.jsonupdate
Wrong API responses (HTML instead of JSON):
- Always use
my.prismacloud.comas the API base bucharest.prismacloud.ccis the web SPA only — it returns HTML for all paths
Cron Configuration (daily at 18:17)
17 18 * * * python3 /path/to/skills/cpap-prisma-app/scripts/fetch-cpap.py
Comments
Loading comments...
