Personligt hälsoobservatorium med sömn och huvudvärk som primära utfallsmått. Målet är att identifiera vad som påverkar sömnkvalitet och huvudvärk via datadriven uppföljning.
gisela_kontext.md för detaljer.bsl_inmatning_gisela.xlsx. Joacim sköter uppladdning och teknik.bsl_analys_gisela.ipynb v1.0 (kopia av v3.18 med USER_ID = 2)gisela_kontext.md (skriven i hennes röst för att klistras in i hennes egna chattar).C:\Users\joaci\Proton Drive\ninjagrandpa\My files\BespokeLife\
Indata\ – Joacims Garmin FIT-filer + bsl_inmatning.xlsx
Indata_Gisela\ – Giselas Garmin FIT-filer + bsl_inmatning_gisela.xlsx
Scripts\ – alla .py och .bat filer, bsl_analys.ipynb
Rapporter\ – exporterade HTML-rapporter (bsl_rapport.html + daterade arkiv)
Garmin FIT-filer (Joacim) ligger i:
C:\Users\joaci\Proton Drive\ninjagrandpa\My files\Privat\Garmin\Inbox
lokal_tid = enda källan till sanning i garmin-tabellernadatum = generated column = lokal_tid::date (kalenderdatum, ALDRIG ändras manuellt)natt_datum = generated column = lokal_tid::date + 1 om kl ≥ 18, annars lokal_tid::datedaglig_logg.datum = uppvakningsdatum (= natt_datum för natten innan). En rad är en mix av gårdagens natt och inmatningar om aktuell dag.garmin_puls.natt_datum = daglig_logg.datumHH:MM, aldrig Excels tidsformattimestamp_16 = sekunder från intern Garmin-epoch, kalibreras mot monitoring_info-ankaret:44-sekunders artefakter (SpO2-sensor) tas bort i garmin_upload.pydatum_fran_lokal() finns EJ längre i garmin_upload.py – datum beräknas av Supabasepuls < 62 OCH stress < 20 → sovn = 1sovn i garmin_puls_stress| Skript | Tabell | User |
|---|---|---|
garmin_upload.py |
garmin_puls/stress/puls_stress | 1 (Joacim) |
garmin_upload_gisela.py |
garmin_puls/stress/puls_stress | 2 (Gisela) |
bsl_upload.py |
daglig_logg, huvudvark_log, kost_log, interventioner | 1 (Joacim) |
bsl_upload_gisela.py |
daglig_logg, huvudvark_log, kost_log, interventioner | 2 (Gisela) |
Alla skript använder on_conflict för idempotent uppladdning – kan köras om hur många gånger som helst utan dubbletter.
garmin_puls / garmin_stress / garmin_puls_stress
├── id BIGINT PK (SERIAL)
├── user_id INT FK → users(id)
├── lokal_tid TIMESTAMP ← enda källan till sanning
├── datum DATE ← GENERATED: lokal_tid::date
├── natt_datum DATE ← GENERATED: lokal_tid::date + 1 om hour >= 18, annars lokal_tid::date
└── puls_bpm/stress/sovn etc
UNIQUE constraint: (user_id, lokal_tid)
| Kolumn | Format | Beskrivning |
|---|---|---|
| datum | DATE | Uppvakningsdatum (PK) – = natt_datum för natten |
| la_mej | TEXT HH:MM | Lade sig |
| somnade | TEXT HH:MM | Somnade |
| antal_uppvaknanden | INT | Antal gånger vaken |
| langd_uppvaknanden | INT | Vakentid i minuter |
| steg_upp | TEXT HH:MM | Steg upp |
| kansla_uppstigning | INT 1-5 | Känsla vid uppstigning |
| sovn_kvalitet | INT 1-5 | Sömnkvalitet |
| vikt | FLOAT | Vikt kg |
| sjuk | INT | Sjukdomsgrad |
| dagtyp | TEXT | Vanlig/Semester/Resdag/Sjuk/Akupunktur |
| traning_typ | TEXT | Typ av träning |
| traning_intensitet | INT 1-3 | Träningsintensitet |
| pollenbesvar | INT 0-3 | Pollenbesvär |
| kaffe_muggar | INT | Antal muggar kaffe |
| garmin_total/djup/latt/rem/vaken | FLOAT | Garmin sömndata (h) |
| garmin_steg | INT | Steg |
| garmin_kalorier | INT | Förbrukade kalorier |
UNIQUE constraint: (user_id, datum, tid, maltid, livsmedel)
UNIQUE constraint: (user_id, datum_start, beskrivning)
UNIQUE constraint: (user_id, datum, tid)
URL: https://private.moosetrail.xyz/halsa/
Skydd: Lösenordsskydd via egensajt.se kontrollpanel (Basic Auth)
Struktur:
private.moosetrail.xyz/
└── halsa/
├── index.html ← landningssida (Joacim / Gisela-länkar)
├── joacim/
│ └── bsl_rapport.html ← alltid senaste rapporten
└── gisela/ ← kommer när hennes data finns
Workflow för ny rapport:
1. Kör Export_notebook.bat → HTML sparas i Rapporter\
2. Öppna WinSCP (session "moosetrail" sparad)
3. Dra HTML-filen till /private.moosetrail.xyz/public_html/halsa/joacim/
4. Döp om till bsl_rapport.html (skriver över tidigare)
/private.moosetrail.xyzbsl_analys_gisela.ipynb (när hon har ~2 veckor data)N=1 Single Subject Research Design. Baslinje mars 2026, interventionsperiod april–.
Ladda upp bsl_kontext.md, bsl_halsa.md, bsl_notebook_setup.md (+ notebook om ändringar planeras).
Beskriv vad sessionen ska åstadkomma.