BangleApps/apps/sleeplog
storm64 919ec8c34b [sleeplog] Update metadata.json
Edit screenshots
2022-08-29 23:15:41 +02:00
..
ChangeLog sleeplog: Update ChangeLog 2022-08-18 00:31:58 +02:00
README.md [sleeplog] Update README.md + screenshots 2022-08-29 23:11:49 +02:00
app-icon.js sleeplog: Add Sleep Log App 2022-02-11 09:29:02 +01:00
app.js [sleeplog] Add "View log" in debug + send via BT 2022-05-26 10:41:56 +02:00
app.png sleeplog: Add Sleep Log App 2022-02-11 09:29:02 +01:00
boot.js sleeplog: Update boot.js 2022-08-17 23:21:35 +02:00
conf_20x20.png [sleeplog] Replace old icons 2022-05-20 20:14:05 +02:00
debug_20x20.png [sleeplog] Replace old icons 2022-05-20 20:14:05 +02:00
file_20x20.png [sleeplog] Replace old icons 2022-05-20 20:14:05 +02:00
interface.html [sleeplog] Redesign interfacce.html 2022-05-24 23:13:03 +02:00
lib.js [sleeplog] Complete rework, BETA v01 2022-05-20 17:17:30 +02:00
metadata.json [sleeplog] Update metadata.json 2022-08-29 23:15:41 +02:00
off_20x20.png [sleeplog] Replace old icons 2022-05-20 20:14:05 +02:00
screenshot-1_app_light.png [sleeplog] Update README.md + screenshots 2022-08-29 23:11:49 +02:00
screenshot-2_day_light.png [sleeplog] Update README.md + screenshots 2022-08-29 23:11:49 +02:00
screenshot-3_graph_light.png [sleeplog] Update README.md + screenshots 2022-08-29 23:11:49 +02:00
screenshot-4_graph2_light.png [sleeplog] Update README.md + screenshots 2022-08-29 23:11:49 +02:00
screenshot-5_app_dark.png [sleeplog] Update README.md + screenshots 2022-08-29 23:11:49 +02:00
screenshot-6_day_dark.png [sleeplog] Update README.md + screenshots 2022-08-29 23:11:49 +02:00
screenshot-7_graph_dark.png [sleeplog] Update README.md + screenshots 2022-08-29 23:11:49 +02:00
screenshot-8_graph2_dark.png [sleeplog] Update README.md + screenshots 2022-08-29 23:11:49 +02:00
settings.js [sleeplog] Update README.md 2022-08-29 22:25:19 +02:00

README.md

Sleep Log

This app logs and displays the following states:

  • sleepling status: unknown, not worn, awake, light sleep, deep sleep
  • consecutive sleep status: unknown, not consecutive, consecutive

It is using the built in movement calculation to decide your sleeping state. While charging it is assumed that you are not wearing the watch and if the status changes to deep sleep the internal heartrate sensor is used to detect if you are wearing the watch.

Logfiles are not removed on un-/reinstall to prevent data loss.

Filename (* example) Content Removeable in
sleeplog.log (StorageFile) recent logfile App Web Interface
sleeplog_1234.log* old logfiles App Web Interface
sleeplog_123456.csv* debugging files Web IDE

App Usage


On the main app screen:

  • swipe left & right
    to change the displayed day
  • touch the "title" (e.g. Night to Fri 20/05/2022)
    to enter day selection prompt
  • touch the info area
    to change the displayed information
    (by default: consecutive & true sleeping)
  • touch the wrench (upper right corner)
    to enter the settings
  • use back button widget (upper left corner)
    exit the app

Inside the settings:

  • Thresholds submenu
    Changes take effect from now on, not retrospective!
    • Max Awake | maximal awake duration
      10min / 20min / ... / 60min / ... / 120min
    • Min Consecutive | minimal consecutive sleep duration
      10min / 20min / ... / 30min / ... / 120min
    • Deep Sleep | deep sleep threshold
      30 / 31 / ... / 100 / ... / 200
    • Light Sleep | light sleep threshold
      100 / 110 / ... / 200 / ... / 400
    • Reset to Default | reset to bold values above
  • BreakToD | time of day to break view
    0:00 / 1:00 / ... / 12:00 / ... / 23:00
  • App Timeout | app specific lock timeout
    0s / 10s / ... / 120s
  • Enabled | completely en-/disables the background service
    on / off
  • Debugging submenu
    • View log | display logfile data
      Select the logfile by its starting time.
      Thresholds are shown as line with its value.
      • swipe left & right
        to change displayed duration
      • swipe up & down
        to change displayed value range
      • touch the graph
        to change between light & dark colors
      • use back button widget (upper left corner)
        to go back to the logfile selection
    • Enabled | en-/disables debugging
      on / off
    • write File | toggles if a logfile is written
      on / off
    • Duration | duration for writing into logfile
      1h / 2h / ... / 12h / 96
    • The following data is logged to a csv-file:
      timestamp (in days since 1900-01-01 00:00 UTC used by office software) , movement, status, consecutive, asleepSince, awakeSince, bpm, bpmConfidence

Web Interface Usage


Available through the App Loader when your watch is connected.

  • view data
    Display the data to each timestamp in a table.
  • save csv-file
    Download a csv-file with the data to each timestamp.
    The time format is chooseable beneath the file list.
  • delete file
    Deletes the logfile from the watch. Please backup your data first!

Timestamps and files


  1. externally visible/usable timestamps (in global.sleeplog) are formatted as Bangle timestamps:
    seconds since 1970-01-01 00:00 UTC
  2. internally used and logged (to sleeplog.log (StorageFile)) is within the highest available resolution:
    10 minutes since 1970-01-01 00:00 UTC (Bangle / (10 * 60 * 1000))
  3. debug .csv file ID (sleeplog_123456.csv) has a hourly resolution: hours since 1970-01-01 00:00 UTC (Bangle / (60 * 60 * 1000))
  4. logged timestamps inside the debug .csv file are formatted for office calculation software:
    days since 1900-01-01 00:00 UTC (Bangle / (24 * 60 * 60 * 1000) + 25569)
  5. every 14 days the sleeplog.log (StorageFile) is reduced and old entries are moved into separat files for each fortnight (sleeplog_1234.log) but still accessible though the app:
    fortnights since 1970-01-04 12:00 UTC (converted with require("sleeplog").msToFn(Bangle) and require("sleeplog").fnToMs(fortnight))
  • Logfiles from before 0.10:
    timestamps and sleeping status of old logfiles are automatically converted on your first consecutive sleep or manually by require("sleeplog").convertOldLog()

  • View logged data:
    if you'd like to view your logged data in the IDE, you can access it with require("sleeplog").printLog(since, until) or require("sleeplog").readLog(since, until) to view the raw data
    since & until in Bangle timestamp, e.g. require("sleeplog").printLog(Date()-24*60*60*1000, Date()) for the last 24h


Access statistics (developer information)


  • Last Asleep Time [Date]:
    Date(sleeplog.awakeSince)
  • Last Awake Duration [ms]:
    Date() - sleeplog.awakeSince
  • Last Statistics [object]:
    // get stats of the last night (period as displayed inside the app)
    //  as this might be the mostly used function the data is cached inside the global object 
    sleeplog.getStats();
    
    // get stats of the last 24h
    require("sleeplog").getStats(0, 24*60*60*1000);
    // same as
    require("sleeplog").getStats(Date.now(), 24*60*60*1000);
    // output as object, timestamps as UNIX timestamp, durations in minutes
    ={ calculatedAt: 1653123553810, deepSleep: 250, lightSleep: 150, awakeSleep: 10,
      consecSleep: 320, awakeTime: 1030, notWornTime: 0, unknownTime: 0, logDuration: 1440,
      firstDate: 1653036600000, lastDate: 1653111600000 }
    
    // to get the start of a period defined by "Break TOD" of any date
    var startOfBreak = require("sleeplog").getLastBreak();
    // same as
    var startOfBreak = require("sleeplog").getLastBreak(Date.now());
    // output as date
    =Date: Sat May 21 2022 12:00:00 GMT+0200
    
    // get stats of this period as displayed inside the app
    require("sleeplog").getStats(require("sleeplog").getLastBreak(), 24*60*60*1000);
    // or any other day
    require("sleeplog").getStats(require("sleeplog").getLastBreak(Date(2022,4,10)), 24*60*60*1000);
    
  • Total Statistics [object]:
    // use with caution, may take a long time !
    require("sleeplog").getStats(0, 0, require("sleeplog").readLog());
    

Worth Mentioning


To do list

  • Check translations.
  • Add more functionallities to interface.html.
  • Enable recieving data on the Gadgetbridge side + testing.
    Help appreciated!

Requests, Bugs and Feedback

Please leave requests and bug reports by raising an issue at github.com/storm64/BangleApps (or send me a mail).

Creator

Storm64 (Mail, github)

Contributors

myxor (github)

Attributions

The app icon is downloaded from https://icons8.com.

License

MIT License