Tworzenie funkcji związanych ze snem za pomocą interfejsu Google Health API

Interfejs API Google Health udostępnia typy danych, które śledzą wzorce snu użytkownika, w tym czas trwania, jakość i wskaźniki fizjologiczne podczas odpoczynku. Te dane pomagają aplikacjom dostarczać informacji o regeneracji, higienie snu i długoterminowych trendach zdrowotnych.

Wskaźniki fizjologiczne, takie jak zmienność rytmu serca (HRV), nasycenie krwi tlenem (SpO2) i częstość oddychania, są rejestrowane w trakcie snu, ponieważ organizm znajduje się wtedy w stabilnym stanie spoczynku. Dzięki temu interfejs API może rejestrować podstawowe dane dotyczące autonomicznego układu nerwowego i zdrowia układu oddechowego użytkownika bez zakłóceń spowodowanych przez czynniki stresogenne w ciągu dnia, aktywność fizyczną lub zmienne warunki środowiskowe.

Poznaj różnice między tymi typami danych, aby określić, które dane pasują do Twojej aplikacji.

Obsługiwane typy danych

Interfejs API obsługuje te typy danych do pomiaru snu:

Tabela. Typy danych snu w interfejsie Google Health API
Typ danych Dostępne
operacje
Zakres
Dzienna zmienność rytmu serca
dataType: daily-heart-rate-variability
filter parameter: daily_heart_rate_variability
Typ rekordu: dzienny

Zgodne urządzenia

lista, uzgadnianie .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Codzienne nasycenie tlenem
dataType: daily-oxygen-saturation
filter parameter: daily_oxygen_saturation
Typ rekordu: dzienny

Zgodne urządzenia

lista, uzgadnianie .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Dzienna częstość oddechów
dataType: daily-respiratory-rate
filter parameter: daily_respiratory_rate
Typ rekordu: dzienny

Zgodne urządzenia

lista, uzgadnianie .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Codzienne wyliczenia temperatury podczas snu
dataType: daily-sleep-temperature-derivations
filter parameter: daily_sleep_temperature_derivations
Typ rekordu: dzienny

Zgodne urządzenia

lista, uzgadnianie .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Zmienność rytmu serca
dataType: heart-rate-variability
filter parameter: heart_rate_variability
Typ rekordu: Próbka

Zgodne urządzenia

lista, uzgadnianie .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Nasycenie tlenem
dataType: oxygen-saturation
filter parameter: oxygen_saturation
Typ rekordu: Próbka

Zgodne urządzenia

lista, uzgadnianie .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Podsumowanie snu na podstawie częstości oddechów
dataType: respiratory-rate-sleep-summary
filter parameter: respiratory_rate_sleep_summary
Typ rekordu: Próbka

Zgodne urządzenia

lista, uzgadnianie .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Sen
dataType: sleep
filter parameter: sleep
Typ rekordu: sesja

Zgodne urządzenia

list, get, reconcile, create, update, batchDelete .sleep.readonly
.sleep.writeonly

Sesje snu i krótkie przebudzenia

Sesja snu (Sleep) to pojedyncze zdarzenie związane ze snem, np. sen w nocy lub drzemka w ciągu dnia. Obejmuje szczegółowe zestawienie niepokrywających się faz snu oraz krótkich okresów przejściowych do stanu czuwania, zwanych krótkimi przebudzeniami.

  • Sesja snu (Sleep): reprezentuje odrębne zdarzenie snu (LIGHT, DEEP, REM, AWAKE – przedziały czasowe poszczególnych faz), które dzielą ciągłą oś czasu głównego odpoczynku.
  • Krótkie przebudzenia (shortAwakenings): krótkie przejścia do stanu czuwania lub przebudzenia, które występują podczas odpoczynku. W przeciwieństwie do standardowych AWAKEprzedziałów faz snu (które dzielą niepokrywające się, ciągłe fazy snu) krótkie przebudzenia to odrębne segmenty, które mogą się pokrywać z otaczającymi je fazami snu. Zapewniają szczegółowy wgląd w niepokój i mikroprzebudzenia bez zakłócania podstawowej struktury faz snu.

Przykład

{
  "name": "sleeps/12345",
  "startTime": "2026-04-20T22:30:00Z",
  "endTime": "2026-04-21T06:30:00Z",
  "sleepType": "STAGES",
  "sleepStages": [
    {
      "startTime": "2026-04-20T22:30:00Z",
      "endTime": "2026-04-20T23:45:00Z",
      "type": "LIGHT"
    },
    {
      "startTime": "2026-04-20T23:45:00Z",
      "endTime": "2026-04-21T01:15:00Z",
      "type": "DEEP"
    }
  ],
  "shortAwakenings": [
    {
      "startTime": "2026-04-20T23:10:00Z",
      "endTime": "2026-04-20T23:11:30Z",
      "type": "AWAKE"
    }
  ]
}

Tworzenie sesji snu

Aby utworzyć wpis sesji snu, wyślij żądanie POST do punktu końcowego sleep data points. Odpowiedź zawiera pole name z wartością data-point-id, której można użyć w żądaniu Update (Patch) lub Delete.

Żądanie

POST https://health.googleapis.com/v4/users/me/dataTypes/sleep/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "sleep": {
    "interval": {
      "startTime": "2026-06-07T22:00:00Z",
      "startUtcOffset": "-14400s",
      "endTime": "2026-06-08T06:00:00Z",
      "endUtcOffset": "-14400s"
    },
    "type": "STAGES",
    "stages": [
      {
        "startTime": "2026-06-07T22:00:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-07T22:30:00Z",
        "endUtcOffset": "-14400s",
        "type": "LIGHT"
      },
      {
        "startTime": "2026-06-07T22:30:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-07T23:45:00Z",
        "endUtcOffset": "-14400s",
        "type": "DEEP"
      },
      {
        "startTime": "2026-06-07T23:45:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T02:15:00Z",
        "endUtcOffset": "-14400s",
        "type": "LIGHT"
      },
      {
        "startTime": "2026-06-08T02:15:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T02:45:00Z",
        "endUtcOffset": "-14400s",
        "type": "REM"
      },
      {
        "startTime": "2026-06-08T02:45:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T05:15:00Z",
        "endUtcOffset": "-14400s",
        "type": "LIGHT"
      },
      {
        "startTime": "2026-06-08T05:15:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T06:00:00Z",
        "endUtcOffset": "-14400s",
        "type": "REM"
      }
    ]
  }
}

Odpowiedź

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/sleep/dataPoints/data-point-id",
    "sleep": {
      "interval": {
        "startTime": "2026-06-07T22:00:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T06:00:00Z",
        "endUtcOffset": "-14400s"
      },
      "type": "STAGES",
      "stages": [
        {
          "startTime": "2026-06-07T22:00:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-07T22:30:00Z",
          "endUtcOffset": "-14400s",
          "type": "LIGHT"
        },
        {
          "startTime": "2026-06-07T22:30:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-07T23:45:00Z",
          "endUtcOffset": "-14400s",
          "type": "DEEP"
        },
        {
          "startTime": "2026-06-07T23:45:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T02:15:00Z",
          "endUtcOffset": "-14400s",
          "type": "LIGHT"
        },
        {
          "startTime": "2026-06-08T02:15:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T02:45:00Z",
          "endUtcOffset": "-14400s",
          "type": "REM"
        },
        {
          "startTime": "2026-06-08T02:45:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T05:15:00Z",
          "endUtcOffset": "-14400s",
          "type": "LIGHT"
        },
        {
          "startTime": "2026-06-08T05:15:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T06:00:00Z",
          "endUtcOffset": "-14400s",
          "type": "REM"
        }
      ]
    }
  }
}

Codzienne dane dotyczące temperatury podczas snu

Codzienne dane dotyczące temperatury podczas snu mierzą wahania temperatury skóry użytkownika podczas snu w porównaniu z wartością bazową. Dane te są zwykle raportowane raz dziennie po dłuższej sesji snu.

Częstość oddechów

Częstość oddechów to liczba oddechów użytkownika na minutę. Podczas snu jest to kluczowy wskaźnik monitorowania jakości snu i potencjalnych zaburzeń. Interfejs API obsługuje próbkowanie częstości oddychania (respiratory-rate), podsumowania dzienne (daily-respiratory-rate) i podsumowania snu na poziomie sesji (respiratory-rate-sleep-summary).

Zmienność rytmu serca (HRV)

HRV to miara odstępów między uderzeniami serca. Jest to kluczowy wskaźnik stanu autonomicznego układu nerwowego. Wysoka zmienność rytmu serca podczas snu zwykle oznacza lepszą regenerację i gotowość, a niska zmienność rytmu serca może wskazywać na stres lub przetrenowanie. Interfejs API obsługuje próbki zmienności rytmu serca (heart-rate-variability) i podsumowania dzienne (daily-heart-rate-variability).

Nasycenie tlenem (SpO2)

SpO2 to procent hemoglobiny wysyconej tlenem w stosunku do całkowitej ilości hemoglobiny we krwi. Monitorowanie SpO2 podczas snu ma kluczowe znaczenie dla wykrywania potencjalnych zaburzeń oddychania i zapewnienia odpowiedniego poziomu tlenu przez całą noc. Interfejs API obsługuje próbki SpO2 (oxygen-saturation) i dzienne podsumowania (daily-oxygen-saturation).

Holistyczny widok zdrowia snu i regeneracji

Każdy z tych wskaźników dostarcza konkretnych informacji, ale są one ze sobą ściśle powiązane i razem dają pełny obraz regeneracji użytkownika. Fazy snu (płytki, głęboki, REM) stanowią podstawę odpoczynku, a markery fizjologiczne, takie jak HRV i SpO2, wskazują, jak organizm reaguje na ten odpoczynek. Na przykład wysokiej jakości sen z optymalną fazą snu głębokiego często wiąże się z wyższym poziomem HRV, co oznacza efektywną regenerację autonomicznego układu nerwowego.

Połączenie tych danych z częstością oddychania i temperaturą podczas snu pozwala aplikacjom wykrywać potencjalne zaburzenia. Nagły wzrost częstotliwości oddechu lub odchylenie temperatury ciała podczas snu mogą wyjaśniać, dlaczego użytkownik spędził mniej czasu w fazach regeneracyjnych. Analizując te typy danych jednocześnie, deweloperzy mogą zapewnić kompleksową ocenę higieny snu i długoterminowych trendów zdrowotnych.

Wytyczne

Podczas integrowania danych snu w aplikacji postępuj zgodnie z tymi wskazówkami:

  • Szczegóły sesji: aby wyświetlić fazy snu użytkownika (płytki, głęboki, REM, przebudzenie) i krótkie przebudzenia, wyślij zapytanie o typ danych sleep.
  • Monitorowanie fizjologiczne: aby uzyskać zaawansowane monitorowanie zdrowia, połącz dane sesji snu z danymi fizjologicznymi i danymi dotyczącymi regeneracji, takimi jak respiratory-rate-sleep-summary, daily-sleep-temperature-derivations, daily-heart-rate-variabilitydaily-oxygen-saturation.
  • Uzgodnienie: użyj operacji reconcile, aby mieć pewność, że nakładające się na siebie logi snu z różnych urządzeń (np. urządzenia do noszenia i czujnika na materacu) zostaną połączone w jeden „główny” rekord snu.

Obliczanie łącznego czasu snu głębokiego

Aby obliczyć łączny czas, jaki użytkownik spędził w fazie regenerującego snu głębokiego w konkretną noc:

  1. Wyszukaj typ danych sleep w określonym zakresie czasu.
  2. Przejdź przez listę etapów i zidentyfikuj przedziały, w których stageType jest DEEP.
  3. Oblicz czas trwania (czas zakończenia – czas rozpoczęcia) każdego przedziału snu głębokiego i zsumuj je.

Wynikowa suma to łączny czas trwania snu głębokiego podczas danej sesji.