Chapitre 1 : Pourquoi intégrer son CPAP à Home Assistant ? L’apnée du sommeil touche 1 personne sur 5 après 50 ans. Ton appareil ResMed CPAP (AirSense 10, 11, AirCurve…) envoie déjà ses données à myAir, l’application officielle. Mais Home Assistant va plus loin : Avantages Exemples concrets Dashboard santé centralisé Score, AHI, fuites, usage en un coup d’œil Alertes intelligentes Notification si AHI > 5 ou usage < 4h Historiques longs Graphiques sur 1 mois, 3 mois, 1 an Intégration domotique Allume une lampe rouge si fuites élevées Motivation quotidienne Badges de streak, gamification Chapitre 2 : Créer ton compte myAir (EU) Étapes pas à pasAccède au site → Clique sur "S’inscrire" Remplis le formulaire : Email → sera ton identifiant Home Assistant Mot de passe : 8+ caractères, 1 majuscule, 1 chiffre Pays : France Valide ton email (lien reçu en 2 min) Ajoute ton CPAP : Numéro de série (au dos de la machine) Modèle (ex: AirSense 11 AutoSet) Active Wi-Fi ou modem cellulaire VérificationAprès une nuit de sommeil : Score myAir visible AHI affiché Temps d’utilisation > 0 Chapitre 3 : Installer l’intégration via HACS PrérequisHome Assistant 2025.10+ HACS installé Compte myAir actif InstallationHACS → Integrations → Explore & Download Repositories Recherche : ResMed myAir Clique sur "Download" → Redémarre Home Assistant Settings > Devices & Services > + Add Integration Tape ResMed → sélectionne ResMed myAir CPAP Sensors Remplis : Username:
[email protected]
Password: ********
Region: EU (ou Auto)
Scan interval: 30 minutes Problème ? Rafraîchis la page, redémarre HA, ou vérifie les logs (resmed_myair). Chapitre 4 : Les capteurs disponibles (v0.1.18) Entité Nom Unité Description sensor.cpap_ahi_events_per_hour AHI événements/h Apnée + hypopnée sensor.cpap_usage_minutes Utilisation min Temps masque porté sensor.cpap_mask_on_off_count Retrait masque count Nombre d’enlèvements sensor.cpap_mask_leak_percentile Fuites % Percentile 95 sensor.cpap_myair_score Score myAir /100 Score global sensor.cpap_device_model Modèle texte AirSense 11, etc. sensor.cpap_current_data_date Date données date Dernière nuit sensor.cpap_sleep_data_last_collected Collecte datetime Dernier sync Chapitre 5 : Dashboard Lovelace complet (Mushroom + Flex + ApexCharts) Code YAML complet de ma CARTEtype: sections
max_columns: 6
title: Santé CPAP
path: sante
icon: mdi:heart-pulse
theme: transparentblue
sections:
# === 1. RÉSUMÉ QUOTIDIEN ===
- type: grid
cards:
- type: custom:mushroom-title-card
title: ""
subtitle: Résumé quotidien
- type: grid
square: false
columns: 2
cards:
- type: custom:mushroom-entity-card
entity: sensor.cpap_current_data_date
name: Dernière nuit
icon: mdi:calendar
icon_color: blue
primary_info: state
secondary_info: last_changed
layout: horizontal
- type: custom:mushroom-entity-card
entity: sensor.cpap_usage_minutes
name: Utilisation masque
icon: mdi:face-mask
icon_color: green
primary_info: state
secondary_info: last_changed
layout: horizontal
- type: grid
square: false
columns: 3
cards:
- type: custom:mushroom-title-card
title: ""
subtitle: Score myAir
alignment: center
- type: custom:mushroom-title-card
title: ""
subtitle: AHI
alignment: center
- type: custom:mushroom-title-card
title: ""
subtitle: Retrait masque
alignment: center
- type: grid
square: false
columns: 3
cards:
- type: custom:flex-horseshoe-card
entities:
- entity: sensor.cpap_myair_score
decimals: 0
unit: ""
show: { horseshoe_style: autominmax }
layout:
states:
- id: 0
entity_index: 0
xpos: 50
ypos: 66
styles: { font-size: 6.5em; }
horseshoe_scale: { min: 0, max: 100 }
color_stops:
"70": red
"85": orange
"90": green
- type: custom:flex-horseshoe-card
entities:
- entity: sensor.cpap_ahi_events_per_hour
decimals: 1
unit: /h
show: { horseshoe_style: autominmax }
layout:
states:
- id: 0
entity_index: 0
xpos: 50
ypos: 60
styles: { font-size: 5.5em; }
horseshoe_scale: { min: 0, max: 30 }
color_stops:
"5": green
"15": orange
"30": red
- type: custom:flex-horseshoe-card
entities:
- entity: sensor.cpap_mask_on_off_count
decimals: 0
unit: fois
show: { horseshoe_style: autominmax }
layout:
states:
- id: 0
entity_index: 0
xpos: 50
ypos: 57
styles: { font-size: 4.5em; }
horseshoe_scale: { min: 0, max: 7 }
color_stops:
"2": green
"4": orange
"7": red
- type: custom:mini-graph-card
entities:
- entity: sensor.cpap_mask_leak_percentile
name: Fuites masque (95e percentile)
show: { name: true, icon: false, fill: true }
color_thresholds:
- { value: 0, color: "#43A047" }
- { value: 24, color: "#FF9800" }
- { value: 40, color: "#E53935" }
hours_to_show: 168
# === 2. REVUE HEBDOMADAIRE ===
- type: grid
cards:
- type: custom:mushroom-title-card
title: ""
subtitle: Revue hebdomadaire
- type: custom:apexcharts-card
graph_span: 7d
header: { show: true, title: Utilisation CPAP }
series:
- entity: sensor.cpap_usage_minutes
type: column
name: Minutes/jour
group_by: { func: max, duration: 1d }
show: { as_duration: minute, datalabels: true }
- type: custom:apexcharts-card
graph_span: 14d
header: { show: true, title: Score myAir }
series:
- entity: sensor.cpap_myair_score
type: column
group_by: { func: max, duration: 1d }
color_threshold:
- { value: 0, color: "#E53935" }
- { value: 85, color: "#FFB300" }
- { value: 90, color: "#43A047" }
- type: custom:apexcharts-card
graph_span: 14d
header: { show: true, title: AHI }
series:
- entity: sensor.cpap_ahi_events_per_hour
type: column
group_by: { func: max, duration: 1d }
color_threshold:
- { value: 5, color: "#43A047" }
- { value: 15, color: "#FFB300" }
- { value: 30, color: "#E53935" }
# === 3. REVUE MENSUELLE ===
- type: grid
cards:
- type: custom:mushroom-title-card
title: ""
subtitle: Revue mensuelle (moyenne hebdo)
- type: custom:apexcharts-card
graph_span: 1month
series:
- entity: sensor.cpap_myair_score
type: column
name: Score moyen
group_by: { func: avg, duration: 1week }
color_threshold:
- { value: 85, color: "#43A047" }
- { value: 70, color: "#FFB300" }
- { value: 0, color: "#E53935" }
header:
card:
type: markdown
content: |
# Santé CPAP - {{ user }}
Dernière mise à jour : {{ states('sensor.cpap_sleep_data_last_collected') | timestamp_custom('%H:%M') }} Chapitre 6 : Automatisations utiles1. Alerte AHI élevé- alias: "Alerte AHI > 5"
trigger:
- platform: numeric_state
entity_id: sensor.cpap_ahi_events_per_hour
above: 5
action:
- service: notify.mobile_app_iphone
data:
title: "CPAP - AHI élevé"
message: "AHI = {{ states('sensor.cpap_ahi_events_per_hour') }} /h"2. Rappel usage faible- alias: "Rappel CPAP < 4h"
trigger:
- platform: time
at: "08:00:00"
condition:
- condition: numeric_state
entity_id: sensor.cpap_usage_minutes
below: 240
action:
- service: notify.mobile_app_iphone
data:
title: "CPAP oublié"
message: "Usage hier : {{ states('sensor.cpap_usage_minutes') }} min"Chapitre 7 : Dépannage & problèmes courantsProblème Solution 401 Unauthorized Vérifie mot de passe / région 429 Too Many Requests scan_interval: 3600 Pas de données Vérifie modem CPAP + app myAir Intégration absente Redémarre HA après HACS 2FA activé Désactive-le (non supporté) Chapitre 8 : Conclusion & perspectivesTu as maintenant un suivi médical pro dans Home Assistant : Dashboard clair et motivant Données fiables et quotidiennes Alertes automatiques À faire ensuitePartage ton dashboard sur le forum HA Ajoute un capteur de température chambre pour corréler avec AHI Crée un badge de streak (7 nuits > 4h)